matplotlib是画折线图、散点图这些用的,相对于前端的Echarts,用的频率其实不太高。
matplotlib的存在意义就是,我如果只为了得到几个图像,不需要为数据写一个服务,然后再让前端去搞。
在学习的时候知道一些API就行,具体能画哪些图可以在官方文档中点击Examples看一下 https://matplotlib.org/stable/plot_types/index.html
如果matplotlib满足不了需求可以尝试用其他的库,比如Echarts.js、plot(没用过)、seabron(没用过)
plot python版本的官网 Plotly Python Graphing Library
目录
1 基本使用
我们先简单的画一个折线图,需要x轴与y轴坐标,然后画就行了
下面这个代码经过的点是 (2,15) (5,13) (8,14.6) (9.7,17) 这四个点
plt.plot()是画折线图
plt.show()是展示出来
- 在notebook中你不用plt.show()也能展示出来
2 保存图片 plt.savefig()
savefig()必须卸载plot()之后,要不就会保存一张空的图
运行后在想对路径下就可以得到这张画好的图像
也可以保存为svg格式,svg图像是矢量图,无论放大多少倍也不会模糊
3 设置图片属性 plt.figure()
3.1 设置图片大小 figsize
需要一个元组的参数,我们比如想把图片设置为 宽20个dpi的像素值 高80个dpi的像素值 ,那么就像下面这样写
- dpi是每英寸的像素点数,plt保存默认dpi的值为100,也就是我们下面的图像保存后宽是2000px,高是800px
- 如果要给figsize的20和8定义一个单位的话,那这两个值的单位是英寸
保存后的图像明显是扁了
我们打开属性看一下
3.2 设置图片dpi
dpi是图片每英寸的像素点数,默认为100。这个值可以理解为越大越清晰,我们现在把他设置为10
在保存的图片中可以看到dpi的信息
打开后再放大到适合查看的大小就会发现图像非常模糊
4 定义x轴刻度 plt.xticks()
我们现在画一张这个图像,发现x轴的刻度很多,我掌握不好点的具体数值
4.1 指定任意数字数组作为x轴刻度
这个时候发现了只显示了x的值的刻度,其他的没了
plt/xticks()实际上参数接收的是一个数组,我们可以给他任意的数组
4.2 将数字数组映射为字符串数组
可以把数字映射成字符串,也就是10的位置替换成hello,20的位置替换成world,30的位置替换成suyu
4.3 旋转指定角度
比如我想旋转90度
映射成字符串也是一样
可以旋转任意角度,比如44度
4.4 坐标显示中文
默认情况下显示不了中文
4.4.1 方式一 把字体文件放到指定的位置
这个时候需要往环境文件夹中放一个ttf文件,我们可以通过matplotlib.matplotlib_fname()找到环境文件夹的大致位置
我们可以通过上面的命令找到matplotlibrc这个文件,我们需要将字体文件放在 E:\Anaconda\Lib\site-packages\matplotlib\mpl-data\fonts\ttf 中
- 在windows中可以在 C:\Windows\Fonts 找到字体文件
之后用 matplotlib.rcParams['font.family'] = [字体名] 设置一下就行了
4.4.2 方式二 把字体文件放到任意位置
通过font_manager.FontProperties()实例化一个字体对象,然后在xticks使用fontproperties参数。这个fontproperties不只在xticks()这个函数中可以用,如果需要用到中文的时候就可以用上
4.5 坐标值字体大小
在xticks加上参数size。size这个参数不仅xticks()会用到,别的函数可能也会用到
5 定义y轴刻度 plt.yticks()
与plt.xticks()用法类似,我们简单用一下,参数是一个列表
常用传入纵坐标列表
6 x轴标签 plt.xlabel()
7 y轴标签 plt.ylabel()
8 图像标题 plt.title()
9 图像网格 plt.grid()
网格就是每一个x的刻度画一条竖线,每一个y刻度画一条横线,如果要调整网格的密度可以改变x、y轴的刻度
9.1 透明度 alpha
alpha取值为0到1。1是完全不透明,0是完全透明
9.2 线条风格 linestyle
线条风格(linestyle)可选
- '-' 实线
- '--' 横杠虚线
- '-.' 点画线
- ':' 点虚线
- '' 无线条
10 使用图例
10.1 画多条曲线
首先我们需要画多条曲线,画多条曲线就是plt.plot()多次,多条曲线的维度可以不同
from matplotlib import pyplot as plt
x1 = [2,5,8,9.7,20]
y1 = [15,13,14.6,17,36]
x2 = [4,7,10,12.18]
y2 = [85,45,12,33]
x3 = [12,58,91]
y3 = [23,78,64.66]
plt.plot(x1,y1)
plt.plot(x2,y2)
plt.plot(x3,y3)
plt.show()
10.2 添加图例
首先在plot中加入label,然后使用plt.legend()
- 再plt.legend()中使用中文要用prop参数
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="./STSONG.TTF")
x1 = [2,5,8,9.7,20]
y1 = [15,13,14.6,17,36]
x2 = [4,7,10,12.18]
y2 = [85,45,12,33]
x3 = [12,58,91]
y3 = [23,78,64.66]
plt.plot(x1,y1,label="你")
plt.plot(x2,y2,label="我")
plt.plot(x3,y3,label="他")
plt.legend(prop=my_font)
plt.show()
图例默认会放在最合适的位置,如果不合适可以通过loc参数进行调整,可选值为
- 'best': 0
- 'upper right': 1
- 'upper left': 2
- 'lower left': 3
- 'lower right': 4
- 'right': 5
- 'center left': 6,
- 'center right': 7
- 'lower center': 8
- 'upper center': 9
- 'center': 10
10.3 图例位置
比如我想放在正中间(参数值写10也行,写'center'也行)
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="./STSONG.TTF")
x1 = [2,5,8,9.7,20]
y1 = [15,13,14.6,17,36]
x2 = [4,7,10,12.18]
y2 = [85,45,12,33]
x3 = [12,58,91]
y3 = [23,78,64.66]
plt.plot(x1,y1,label="你")
plt.plot(x2,y2,label="我")
plt.plot(x3,y3,label="他")
plt.legend(prop=my_font,loc=10)
plt.show()
10.4 线条颜色、线条风格、线条粗细、透明度
线条颜色(color)直接用16进制颜色,比如#F0F0F0 (还可以用r、g、b这种代表红绿蓝,orange代表橘色这种)
线条风格(linestyle)可选
- '-' 实线
- '--' 横杠虚线
- '-.' 点画线
- ':' 点虚线
- '' 无线条
粗细(linewidth)为整形,越大越粗。透明度(alpha)为浮点0-1,越大越不透明
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="./STSONG.TTF")
x1 = [2,5,8,9.7,20]
y1 = [15,13,14.6,17,36]
x2 = [4,7,10,12.18]
y2 = [85,45,12,33]
x3 = [12,58,91]
y3 = [23,78,64.66]
plt.plot(x1,y1,label="你",color='#427A79',linestyle='--',linewidth=1,alpha=0.2)
plt.plot(x2,y2,label="我",color='#73137A',linestyle='-.',linewidth=4,alpha=0.5)
plt.plot(x3,y3,label="他",color='#0E7A2C',linestyle=':',linewidth=8,alpha=0.8)
plt.legend(prop=my_font,loc=10)
plt.show()