导入matplotlib的pyplot模块
import matplotlib.pyplot as plt
一、简单使用plot绘制线条
第1步:定义x和y坐标轴上的点
#x坐标轴上点的数值
x=[1, 2, 3, 4]
#y坐标轴上点的数值
y=[1, 4, 9, 16]
第2步:使用plot绘制线条
第1个参数是x的坐标值,第2个参数是y的坐标值
plt.plot(x,y)
第3步:显示图形
plt.show()
如果plot()里面只有一个列表,则默认x=[0,1,2,3,4...],列表为y的值
plt.plot([1,4,5])
二、多图绘制(Figure和Subplot)
使用plt.figure() 创建画板和plt.subplot() 创建子图
plt.figure(1)代表创建一个画板
subplot(211)生成一个2行1列的子图矩阵,当前是第一个子图
创建子图:
fig=plt.figure()
ax1=fig.add_subplot(2,2,1) #为2*2的图像 ax1为第一个子图
ax2=fig.add_subplot(2,2,2)
ax3=fig.add_subplot(2,2,3)
from numpy.random import randn
plt.plot(randn(50).cumsum(),'k--') #默认在最后一个子图上绘图 k--为设置线型为黑色虚线
import numpy as np
ax1.hist(randn(100),bins=20,color='k',alpha=0.3)#直方图bins表示分为20组color为填充颜色 k为黑色,b为蓝色,r为红色,alpha=0.3设置透明度
ax2.scatter(np.arange(30),np.arange(30)+3*randn(30)) #散点图,默认颜色为深蓝
plt.show
使用索引方式创建子图:
fig,axes=plt.subplots(2,2) 创建可以通过axes[x,y]索引的子图
plt.subplots_adjust(wspace=0,hspace=0) 用于调整子图的间距
fig,axes=plt.subplots(2,2,sharex=True,sharey=True)#sharex=False,sharey=False每个子图都会有x,y刻度 True共用刻度
for i in range(2):
for j in range(2):
axes[i,j].hist(randn(500),bins=50,color='b',alpha=0.5)
plt.subplots_adjust(wspace=0,hspace=0)#控制子图之间的间距的wspace左右 hspace为上下
plt.show()
三、设置颜色、标记、线型
具体可参考https://www.cnblogs.com/darkknightzh/p/6117528.html
颜色color:线条颜色,r表示红色(red)
线型linestyle:线条的形状,dashed表示用虚线连接
标记marker:点的形状,o表示点为圆圈标记
标记、线型必须放在颜色之后
plt.plot(randn(30).cumsum(),color='k',linestyle='dashed', marker='o')
另外针对数据之间的非实际数据点label,默认使用线性插值方式
data = np.random.randn(30).cumsum()
plt.plot(data, 'k--')
可以通过drawstyle修改非实际数据显示形式
plt.plot(data, 'k-', drawstyle='steps-post', label='steps-post')
可以放到一起
plt.plot(data, 'k--')
plt.plot(data, 'k-', drawstyle='steps-post', label='steps-post')
四、刻度、标签、图例、注释
设置刻度.set_xticks([ , ])
刻度的标签.set_xticklabels([,],rotation=30, fontsize='small') rotation标签角度,fontsize标签大小
标题.set_title()
轴的标签.set_xlabel()
添加图例在子图绘制中.plot( , label='one'),.legend(loc='best')
添加注释.text()
添加注释(带箭头).annotate()
fig = plt.figure(figsize=(10,5)) #使用figsize设置画布大小
ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum(),'b', label='one')
ax.plot(randn(1000).cumsum(),'k--', label='two')
ax.plot(randn(1000).cumsum(),'g.', label='three')
ax.legend(loc='best') #添加图例
ticks = ax.set_xticks([0, 250, 500, 750, 1000]) #设置x轴刻度
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'],
rotation=0, fontsize='small') #设置刻度标签,rotation标签角度
ax.set_title('My first matplotlib plot') #设置标题
ax.set_xlabel('Stages')#设置轴标签
ax.text(700,50,'fit',family='monospace',fontsize=20)#在图像上添加注释
ax.annotate('label', xy=(400,20),
xytext=(400,50),
arrowprops=dict(facecolor='red', headwidth=10, width=2,
headlength=4))#添加带箭头的注释(标签名,箭头点的位置,标签的位置,箭头属性)
若图中有中文,为防止中文乱码,先指定默认字体。(其他解决中文乱码的方法参考https://www.zhihu.com/question/25404709/answers/created),
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
ax.annotate('中文', xy=(200,20),
xytext=(200,50),
arrowprops=dict(facecolor='red', headwidth=10, width=2,
headlength=4))
五、图表保存到文件
plt.savefig("case5.png", dpi=400)