matplotlib是python的一个模块,用于绘制各种图形,今天介绍一下折线图的绘制。
先举一个简单的例子:
from matplotlib import pyplot as plt
x=range(4,26,2)
y=[32,43,21,54,32,3,21,32,21,32,43]
plt.plot(x,y)
plt.show()
以上几行代码就可以绘制一个简单的折线图了,其中x和y就构成了若干个点(注意:x和y可以是range类型的,也可以是列表类型,但是二者的元素数目必须相等),模块根据你提供的点就可以绘制出相应的图形了。
我们可以发现,x轴和y轴上的数字并不是我们点的坐标的数字,其实,matplotlib可以让我们自定义x轴和y轴所显示的数字,比如,加上下面两行代码
plt.xticks(range(1,10))
plt.yticks(range(min(y),max(y)+1,5))
就变成了下图
我们发现:虽然我们设置的x轴数字是从1-9,可是却是从3开始显示的,为什么呢?因为我们点的坐标x值最小值为4,它会自动从比最小值小且最接近最小值的数字开始。
我们也可以设置图的大小和清晰度,比如
plt.figure(dpi=80,figsize=(50,70))
dpi为每英寸像素点的个数,后面两个为高和宽
可是当我们想要x轴或y轴显示的是汉字时(不设置的话只能显示数字或字母),该怎么办呢?看一个例子,我们想要绘制10点到12点的温度情况
from matplotlib import pyplot as plot
from matplotlib import font_manager
import random
#设置字体
my_font=font_manager.FontProperties(fname='C:/Windows/WinSxS/amd64_microsoft-windows-f..-microsoftyaheibold_31bf3856ad364e35_10.0.18362.1_none_e1230363312b5372/msyhbd.ttc')
x=[ i for i in range(120)]
y=[random.randint(10,40)for i in range(120)]
plot.figure(dpi=90,figsize=(80,40))
#设置x刻度
plot.yticks(range(10,41))
x_ticks=["10点{}分".format(i) for i in range(60)]
x_ticks+=["11点{}分".format(i) for i in range(60)]
plot.xticks(x[::3],x_ticks[::3],rotation=45,fontproperties=my_font)
plot.plot(x,y)
plot.show()
第5行代码为windows系统设置字体的一种方式,参数为系统中的字体文件所在的位置(可以从c盘搜索.ttc文件找到中文简体的位置),倒数第三行中用第二个参数来代替第一个参数,rotation为旋转的度数,方向为逆时针,fontproperties=my_font使用我们的字体文件。
当我们想要告诉别人x轴和y轴表示什么时,可以这样
plot.xlabel("时间",fontproperties=my_font)
plot.ylabel("温度 摄氏度",fontproperties=my_font)
这里仍然要使用我们上面的字体文件,不然中文不能显示。
我们还可以让图形中显示网格
plot.grid()
当然了,还可以自定义网格的清晰程度
plot.grid(alpha=0.5)
当我们想要在一个折线图中画两条折线时,只需要plot两次即可,例如(由于上面图形太密集,我换了个简单的)
from matplotlib import pyplot as plt
import random
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname='C:/Windows/WinSxS/amd64_microsoft-windows-f..-microsoftyaheibold_31bf3856ad364e35_10.0.18362.1_none_e1230363312b5372/msyhbd.ttc')
x=[i for i in range(11,31)]
y1=[random.randint(1,6) for i in range(11,31)]
y2=[random.randint(1,6) for i in range(11,31)]
x_ticks=["{}岁".format(i) for i in range(11,31)]
plt.grid()
plt.xticks(x[::4],x_ticks[::4],rotation=45,fontproperties=my_font)
plt.xlabel("年龄",fontproperties=my_font)
plt.ylabel("女朋友数目",fontproperties=my_font)
**plt.plot(x,y1)
plt.plot(x,y2)**
plt.show()
看加粗的两行代码,即可以实现以下效果
我们也可以在图中标注出两条折线表示什么,只需要加上如下代码
plt.plot(x,y1,label="自己")
plt.plot(x,y2,label="别人")
plt.legend(prop=my_font)
matplotlib还可以设置线条的颜色、粗细、透明度等等。这里就不一一列举了,大家用的时候可以再查。