常用包一键复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.pyplot import MultipleLocator
from matplotlib.ticker import FuncFormatter
常用设置
# 解决中文显示问题
plt.rcParams['font.sans-serif']=['Time New Roman']
plt.rcParams['axes.unicode_minus']=False
# 字号
plt.rcParams.update({'font.size': 13})
# 画布大小
plt.figure(figsize=(10,8))
# 给画布加上背景色(不要透明)
fig = plt.figure(figsize=(10, 8))
fig.patch.set_facecolor('white')
保存图片
# 先保存,再show
plt.savefig(r'./xxx.svg')
plt.show()
坐标轴设置
# x轴标签倾斜显示
plt.xticks(rotation = 60)
# 设置x轴坐标刻度间距
from matplotlib.pyplot import MultipleLocator
ax = plt.gca()
x_major_locator = MultipleLocator(5)
ax.xaxis.set_major_locator(x_major_locator)
# 上面三行代码可以写成一句
plt.gca().xaxis.set_major_locator(MultipleLocator(5))
# 在图片中加文字注释
plt.annotate('A' , xy=(25, 12), xytext=(0, 0), textcoords='offset points', fontsize=16)
# 解决图片显示不全
plt.tight_layout()
# 坐标轴设置成百分数显示
from matplotlib.ticker import FuncFormatter
def to_percent(temp, position):
return '%1.1f'%(100*temp) + '%'
plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))
# 坐标轴的刻度向右显示(默认是居中)
# 关键就是ha='right'
plt.xticks(list(range(1, 12)), labels, rotation=45, ha='right')
# 坐标刻度用科学计数法
plt.ticklabel_format(style='sci',scilimits=(0,0),axis='both')
# x轴和y轴的刻度比例一样
ax = plt.gca()
ax.set_aspect(1)
# 隐藏坐标轴刻度
plt.xticks([])
plt.yticks([])
图例的设置
# 图例字体变小
plt.legend(fontsize='x-small')
plt.legend(fontsize=8)
# 图例位置
# num1用于控制legend的左右移动,值越大越右,num2上下移动,值越大,越向上。
plt.legend(loc='upper right')
plt.legend(loc='lower left')
plt.legend(loc='upper center', bbox_to_anchor=(num1, num2))
# 图例不要框
plt.legend(frameon=False)
# 两列显示
plt.legend(ncol=2)
# 设置图例两列之间的距离
plt.legend(columnspacing=0.6)
# 设置图例中marker和文字之间的距离
plt.legend(handletextpad=0.1)
# 设置图例中图形和文字之间的距离(假如有3个元素)
legend = plt.gca().legend(ncol=2, loc='upper right', frameon=False, fontsize=17)
legend_text1 = legend.get_texts()[0]
legend_text2 = legend.get_texts()[1]
legend_text3 = legend.get_texts()[2]
legend_text1.set_position((-20, 0)) # 将文字向右移动10个像素
legend_text2.set_position((-20, 0)) # 将文字向右移动10个像素
legend_text3.set_position((-20, 0)) # 将文字向右移动10个像素
隐藏画框的四条边
ax=plt.gca()
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
设置画框四条边的粗细
ax = plt.gca()
ax.spines['bottom'].set_linewidth(3)
ax.spines['left'].set_linewidth(3)
ax.spines['right'].set_linewidth(3)
ax.spines['top'].set_linewidth(3)
子图
plt.subplot(221)
plt.subplot(222)
plt.subplot(211)
# 每一块正常画即可
色卡&私人收藏配色
colors1 = ['#ff595e', '#ffca3a', '#8ac926', '#1982c4', '#6a4c93']
colors = ["#FFBA40", "#42A4D1", '#409B6B', '#8C73BC', '#C6EE58']
colors = ["#D23F00", "#EE8B00", "#F3CE66", "#098294", "#A7D2E3"]
好看的箱线图
plt.figure(figsize=(10,5))
plt.rcParams.update({'font.size': 14})
sns.boxplot(x="村属性", y="数量", data=test, hue="数据类型", width=0.5, linewidth=1.0, palette="Set3",
meanprops = {'marker':'D', 'markersize':6, 'markeredgecolor':"black"},
medianprops = {'linestyle':'--'},
flierprops = {'marker':'o', 'markersize':3},
showmeans=True)
plt.ylim([0,150])
plt.xlabel("村属性")
plt.ylabel("数量")
散点密度图
from scipy.stats import gaussian_kde
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['Arial']
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({'font.size': 15})
fig, ax = plt.subplots(figsize=(5,5))
y = np.array(data['PR'])
x = np.array(data['total_sum'])
xy = np.vstack([x,y])
z = gaussian_kde(xy)(xy)
idx = z.argsort()
x, y, z = x[idx], y[idx], z[idx]
scatter = ax.scatter(x,y,marker='o',c=z, s=15, cmap='Spectral_r')
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.1)
formatter = mpl.ticker.ScalarFormatter(useMathText=True)
formatter.set_scientific(True)
formatter.set_powerlimits((0,0))
cbar = fig.colorbar(scatter, cax=cax, label='kde', format=formatter)
cbar.update_ticks()
ax.set_ylabel('xxx')
ax.set_xlabel('xxx')
ax.ticklabel_format(style='sci',scilimits=(0,0),axis='both')
ax.xaxis.set_major_locator(MultipleLocator(25))
plt.tight_layout()
plt.show()
横向柱状图
importance = list(data2['importance'])
plt.barh(range(15), importance, align = 'center',color='#409B6B', alpha = 0.8, height=0.7)
plt.xlabel('Importance')
plt.title('Total')
plt.xlim([0, 8500])
matplotlib官网_找模板用
https://matplotlib.org/gallery.html
第三方在线画图网站
PlotDB: Share Visualizations with Everyone
配色网站
Trending color palettes - Coolors
Material Design Colors - Material Palette
用Python画地图
参考资料:详解python 利用 pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)、动态流向图_ystraw - Come on!!!-CSDN博客_python 地图热力图
很多现成代码都有,只需要换一下数据。
但是!!需要注意的一点就是,pyecharts有1.x.x和0.x.x两个版本,两个版本不兼容,地区流量图(如下)要用1的版本,热力图要用0的版本,因为我最近两种图都需要画,所以需要在两个版本中反复横跳,经常重复一些安装的代码,所以我这里记下来,下次直接复制。
安装1.x.x,参考from pyecharts import options as opts报错问题以及解决办法_威斯登的博客-CSDN博客
pip install pyecharts35-1.7.1-py3-none-any.whl
安装0.x.x,参考
# 删掉之前的版本(试自己的情况看需不需要卸)
pip uninstall pyecharts35
# 安装
pip install pyecharts==0.1.9.4
对了,如果在cmd里面换了版本,我用的jupyter notebook,记得要把控制台关了重新再开一次,才能生效。