1 图例完善
基础版:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
x=np.linspace(-2*np.pi,2*np.pi,200)
y=np.sin(x)
y1=np.cos(x)
plt.plot(x,y,label=r'$\sin(x)$') # 这里使用TeX功能实现对数学表达式的支持
plt.plot(x,y1,label=r'$\cos(x)$')
plt.legend(loc='lower left') # 用来添加图例,并将其放置在左下角
plt.title("正弦函数与余弦函数的图像")
进阶版
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
x=np.arange(0,2.1,0.1)
y=np.power(x,3)
y1=np.power(x,2)
y2=np.power(x,1)
plt.plot(x,y,label=r'$x^3$')
plt.plot(x,y1,label=r'$x^2$')
plt.plot(x,y2,label=r'$x$')
plt.legend(loc='upper left', bbox_to_anchor=(0.05,0.95),ncol=3,title='function',shadow=True,fancybox=True)
plt.title("函数图像")
plt.show()
代码详解:
plt.legend(loc='upper left', bbox_to_anchor=(0.05,0.95),ncol=3,title='function',shadow=True,fancybox=True)
- loc:位置参数
- ncol:书中并未给出解释,大幅度变动参数似乎对图像没有影响,暂不清楚是控制什么内容的变量
- title:图例标题
- shadow:是否添加阴影,取值True或False fancybox:控制边框线是否为圆角
- bbox_to_anchor:框线位置参数,书中解释:该参数的参数值是个四元元组,且使用Axes坐标系统,第一个参数表示距离画布左侧的x轴长度的倍数的距离,第二个元素代表距离画布底部的y轴长度的倍数的距离,第三个元素代表x轴长度的倍数的线框长度,第四个元素代表y轴长度的倍数的线框宽度。
会讲图例放在上方左手边拐角处的距离坐标轴左边0.1,底部7.6的位置(有些不太懂,希望有大神看到后可以解释下~)plt.legend(loc='upper left', bbox_to_anchor=(0.05,0.95))
2 标题完善
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
x=np.linspace(-2,2,1000)
y=np.exp(x)
plt.plot(x,y,ls='--',lw=2,color='g')
plt.title('left demo',loc='left',fontdict={'size':'xx-large','color':"r",'family':'Times New Roman'})
plt.title('center demo') # 默认黑色字体
plt.title('right demo',loc='right',family='Comic Sans MS',size=20,style='oblique',color='c')
plt.show()
plt.title('right demo',loc='right',family='Comic Sans MS',size=20,style='oblique',color='c')
plt.title('标题内容',loc标题位置,family字体,size字体大小,style字体风格,color字体颜色)
上述对标题格式设置的内容,如family,size,style,color等可以分别作为标题函数title()的关键字参数,也可以放在关键字fontdict字典中存储如:
plt.title('left demo',loc='left',
fontdict={'size':'xx-large',
'color':"r",
'family':'Times New Roman'})
3 带图例的饼图
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
elements=['面粉','砂糖','奶油','草莓酱','坚果']
weight=[40,15,20,10,15]
colors=['#1b9e77','#d95f02','#7570b3','#e6ab02']
wedges,texts,autotexts=plt.pie(weight,autopct='%3.1f%%',textprops=dict(color='w'),colors=colors)
plt.legend(wedges,elements,fontsize=12,title='配料表',loc='center left',bbox_to_anchor=(0.91,0,0.3,1))
plt.setp(autotexts,size=15,weight='bold')
plt.setp(texts,size=12)
plt.title('果酱面包配料比例表')
plt.show()
调用图例函数
plt.legend(wedges,elements)
将饼块外部的文本标签放在图例中,而饼片的数值标签仍放在饼片内部,函数legend()的参数wedges与elements分别表示饼片实例列表和文本标签列表,而且这两个参数要一起配合使用才可以将饼片外部的文本标签放置在图例内部的任务中。
有关带图例的饼图,楔形图,目前都不是特别熟悉,后续继续学习
4 调整刻度单位与刻度标签
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
x=np.linspace(-2*np.pi,2*np.pi,200)
y=np.sin(x)
# 子图1
plt.subplot(211)
plt.plot(x,y)
# 子图2
plt.subplot(212)
plt.xlim(-2*np.pi,2*np.pi)
plt.xticks([-2*np.pi,-3*np.pi/2,-1*np.pi,-1*(np.pi)/2,0,(np.pi)/2,np.pi,3*np.pi/2,2*np.pi],
[r'$-2\pi$',r'$-3\pi/2$',r"$-\pi$",r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$',r'$3\pi/2$',r'$2\pi$'])
plt.plot(x,y,ls='--',lw=2,color='g')
plt.show()
这里普及下plt.xtick()的用法大概类似与覆盖的意思,提示到此,后续自己再写个教程
5 逆序设置坐标轴刻度标签
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
x=np.linspace(-2,2,1000)
y=np.exp(x)
plt.plot(x,y,ls='--',lw=2,color='g')
plt.xlim(2,-2)
plt.show()
这里采用了本文2案例中的代码,多添加了一部分
plt.xlim(2,-2)
将刻度值降序排列的关键在于将原本
plt.xlim(xmax,xmin)
换为了
plt.xlim(xmin,xmax)
以上感谢刘大成《python数据可视化之matplotlib实践》