本文主要讲解matplotlib的基本用法,方便自己以后使用该库进行画图。主要内容有:基本绘制一个图形、横坐标改为中文标尺、添加标题标签等。
看完这一例题,使用matplotlib画图,应该就没什么问题了。
1.绘制基本图形
题目:随机生成10点到12点(120分钟)之间的温度,并绘制出图形。
from matplotlib import pyplot as plt
import random
x = range(0,120)
y = [random.randint(20,35) for i in range(120)] #随机产生20-35度的气候温度
plt.plot(x,y)
plt.show()
x为产生的0-120分钟的时间序列,间隔一分钟
y为随机生成120个气候温度,温度范围为20-35度之间。
通过plt.plot()和plt.show()函数展示出图形,一个最基本的图形就绘制出来了,如下图所示:
在图中,横坐标为0-120之间的数字,表示分钟。
题目中表示的是10点到12点,为了更好的观看图形,需要将横坐标变换成对应时间。
2.横坐标改为中文
需要修改横坐标,就需要修改横坐标的标尺,使用plt.xticks(x_value,x_change)去修改。
x_value:原来的坐标值
x_change:修改后的坐标值(可为字符串)
2.1生成x_chage的值
因为横坐标是要不断改变的,这里每隔一分钟,是需要+1的,但是字符串又不能直接+1,所以需要简单将时间处理一下。
原始坐标:0到120之间不断加1
修改后坐标:10点0分到11点0分,再到12点0分不断加1
x_change = ["10点{}分".format(i) for i in range(60)] #每隔60分钟,就需要进1,转下一行代码
x_change += ["11点{}分".format(i) for i in range(60)] #如果需要继续12点,复制这一行代码,将11点改为12点
plt.xticks(list(x)[::5], x_change[::5],rotation=45) #[::5]表示需要显示的间隔数,数字越大越稀疏,越小越密集,根据需要修改
使用上两行代码,x_change的值就从10点0分开始,一直加到12点0分。
然后通过最下面的一行代码,把修改的值加到横坐标系当中,rotation=45表示文字旋转45度,得到下图所示:
图中的中文部分变成了白框,没有显示中文,这是因为在matplotlib中不支持中文显示,为了将中文显示出来需要进行一些修改。
2.2显示中文
本文以自己的windows电脑为例,在代码中加入下面两行代码:
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")
C:\Windows\Fonts\msyh.ttc 为windows只带的字体路径,根据需要修改需要的路径参数即可。
修改好字体后,需要将字体应用到横坐标中,如图:
再次绘图,坐标系中就可以显示出中文。
2.3小结
将上述代码合并
from matplotlib import pyplot as plt
import random
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")
x = range(0,120)
y = [random.randint(20,35) for i in range(120)] #随机产生20-35度的气候温度
plt.plot(x,y)
x_change = ["10点{}分".format(i) for i in range(60)] #每隔60分钟,就需要进1,转下一行代码
x_change += ["11点{}分".format(i) for i in range(60)] #如果需要继续12点,复制这一行代码,将11点改为12点
plt.xticks(list(x)[::5], x_change[::5],rotation=45,fontproperties=my_font) #[::5]表示需要显示的间隔数,数字越大越稀疏,越小越密集,根据需要修改
plt.show()
得到的图形效果如下:
此时,中文可以显示出来。
3.添加其他信息
为了让图形显示更多的信息,需要给横纵坐标显示标签,并且给整个图形加上一个标题,需要增加如下代码:
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("10点-12点的温度变化情况")
给横纵坐标加上时间、温度标签,并加上一个标题。但由于不支持中文,所以没办法,需要将之前调好的字体my_font应用进来,对代码做如下修改:
plt.xlabel("时间", fontproperties=my_font)
plt.ylabel("温度", fontproperties=my_font)
plt.title("10点-12点的温度变化情况", fontproperties=my_font)
这样就可以显示出中文,在matplotlib中,其他需要显示中文的地方也是如此操作。
4.总结
整体代码:
from matplotlib import pyplot as plt
import random
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")
x = range(0,120)
y = [random.randint(20,35) for i in range(120)] #随机产生20-35度的气候温度
plt.plot(x,y)
x_change = ["10点{}分".format(i) for i in range(60)] #每隔60分钟,就需要进1,转下一行代码
x_change += ["11点{}分".format(i) for i in range(60)] #如果需要继续12点,复制这一行代码,将11点改为12点
plt.xticks(list(x)[::5], x_change[::5],rotation=45,fontproperties=my_font) #[::5]表示需要显示的间隔数,数字越大越稀疏,越小越密集,根据需要修改
plt.xlabel("时间", fontproperties=my_font)
plt.ylabel("温度", fontproperties=my_font)
plt.title("10点-12点的温度变化情况", fontproperties=my_font)
plt.show()
效果图:
根据如上方法,可以较好的解决matplotlib绘图中中文显示的问题,并掌握一些基本的绘图函数以及方法。