使用matplotlib进行折线图的绘制

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还可以设置线条的颜色、粗细、透明度等等。这里就不一一列举了,大家用的时候可以再查。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值