Python - Matplotlib
Matplotlib 是一个用于在 Python 中绘制数组的图形库
下面代码可以直接在python环境下运行
目录
- 方法1:plt.axis([xmin,xmax,ymin,ymax])
- 方法2:plt.xlim(xmin, xmax), plt.ylim(ymin, ymax)
- plt.xticks(), plt.yticks()
- plt.plot(x, y, label)
- plt.legend(), 它的labels参数控制labels, loc 参数控制图例位置
- plt.annotate(text, xy, xytext, arrowprops)
正文
import random
import numpy as np
#随机产生20个1-50/30/20之间的整数(不包含50,30,20)
y1 = np.random.randint(1,50,20)
y2 = np.random.randint(1,30,20)
y3 = np.random.randint(1,15,20)
x = np.arange(20)
#plot 结果是下面图1
import matplotlib.pyplot as plt
#在一个图里面展示三条线
plt.plot(x, y1, '--')
plt.plot(x, y2, '--')
plt.plot(x, y3, '--')
#控制图的x,y坐标轴的取值范围
plt.axis([-1,20,0,80])
plt.show()
#测试plt.xlim 和 plt.ylim, 结果如图2
import matplotlib.pyplot as plt
#在一个图里面展示三条线
plt.plot(x, y1, '--')
plt.plot(x, y2, '--')
plt.plot(x, y3, '--')
#控制图的x,y坐标轴的取值范围
plt.xlim(-1,30)
plt.ylim(0,70)
plt.show()
上面代码生成的图:
例子2:控制图x,y坐标的刻度
- 使用上面的代码中的x, y1, y2, y3值
- plt.xticks(), plt.yticks()
#测试plt.xlim 和 plt.ylim
import matplotlib.pyplot as plt
#在一个图里面展示三条线
plt.plot(x, y1, '--')
plt.plot(x, y2, '--')
plt.plot(x, y3, '--')
#控制图的x,y坐标轴的数值
y_axis = np.arange(0,50,5)
plt.xticks(x)
plt.yticks(y_axis)
plt.show()
结果:
这时候x轴的坐标变成了0-19间距为1, y轴变成了0-50间距为5
例子3:控制图的图例
- plt.legend(), 控制label的显示,注释掉,则label内容不显示。
#测试labels 和 plt.legend()
import matplotlib.pyplot as plt
#在一个图里面展示三条线
plt.plot(x, y1, '--', label='Y1: Mean=%.2f'%np.mean(y1))
plt.plot(x, y2, '--', label='Y2: Mean=%.2f'%np.mean(y2))
plt.plot(x, y3, '--', label='Y2: Mean=%.2f'%np.mean(y2))
#控制图的x,y坐标轴的数值
y_axis = np.arange(0,50,5)
plt.xticks(x)
plt.yticks(y_axis)
#控制图的显示
plt.legend()
plt.show()
- 另一种控制label展示的方式, plt.legend()。
- plt.legend(loc=“lower left”), 它包含loc 函数,可以控制图例的位置。
- 官方文档
#测试label在plt.legend()的另一种显示方式
import matplotlib.pyplot as plt
#在一个图里面展示三条线
plt.plot(x, y1, '--')
plt.plot(x, y2, '--')
plt.plot(x, y3, '--')
#控制图的x,y坐标轴的数值
y_axis = np.arange(0,50,5)
plt.xticks(x)
plt.yticks(y_axis)
#控制图的显示, 把图例显示在做下角
plt.legend(labels=('Y1: Mean=%.2f'%np.mean(y1),'Y2: Mean=%.2f'%np.mean(y2),'Y2: Mean=%.2f'%np.mean(y2)), loc='lower left')
plt.show()
结果
例子4:控制图的注释
- 官方文档
- plt.annotate(text, xy, xytext), 不附加xytext,注释显示在点附近
- 参数:
- text:注释的内容
- xy:要注释的点
- xytext: 注释文本显示的位置
#测试plt.annotate
import matplotlib.pyplot as plt
#在一个图里面展示三条线
plt.plot(x, y1, '--', label='Y1: Mean=%.2f'%np.mean(y1))
plt.plot(x, y2, '--', label='Y2: Mean=%.2f'%np.mean(y2))
plt.plot(x, y3, '--', label='Y2: Mean=%.2f'%np.mean(y2))
#控制图的x,y坐标轴的数值
y_axis = np.arange(0,50,5)
plt.xticks(x)
plt.yticks(y_axis)
#控制图的注释
plt.annotate('The Max value is %d'%max(y1), #控制注释的内容
xy=(y1.index(max(y1)),max(y1)) #要注释的点,y1.index(max(y1)):y1中最大值的索引, max(y1):y1中的最大值
)
#控制图的显示
plt.legend(loc='upper left')
plt.show()
- plt.annotate(text, xy, xytext, arrowprops)
- 参数arrowpros:
- facecolor:箭头颜色
- width:箭头宽度
- headwidth: 箭头的头宽度
#测试plt.xlim 和 plt.ylim
import matplotlib.pyplot as plt
#在一个图里面展示三条线
plt.plot(x, y1, '--', label='Y1: Mean=%.2f'%np.mean(y1))
plt.plot(x, y2, '--', label='Y2: Mean=%.2f'%np.mean(y2))
plt.plot(x, y3, '--', label='Y2: Mean=%.2f'%np.mean(y2))
#控制图的x,y坐标轴的数值
y_axis = np.arange(0,50,5)
plt.xticks(x)
plt.yticks(y_axis)
#控制图的注释
plt.annotate('The Max value is %d'%max(y1), #控制注释的内容
xy=(y1.index(max(y1)),max(y1)), #要注释的点,y1.index(max(y1)):y1中最大值的索引, max(y1):y1中的最大值
xytext = (16,45), #注释显示的位置
arrowprops=dict(facecolor='black', width=0.5, headwidth=5) #控制箭头的颜色,宽度,箭头宽度
#arrowprops=dict(arrowstyle=''<->'') #尝试这个
)
#控制图的显示
plt.legend(loc='upper left')
plt.show()
结果