Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。
Pyplot 是常用的绘图模块,能很方便让用户绘制 2D 图表。
Pyplot 包含一系列绘图函数的相关函数,每个函数会对当前的图像进行一些修改,例如:给图像加上标记,生成新的图像,在图像中产生新的绘图区域等等。
我们可以使用 import 导入 pyplot 库,并设置一个别名 plt:
from matplotlib import pyplot as plt
这样我们就可以使用 plt 来引用 pyplot 包的方法。
✈️1、折线图
from matplotlib import pyplot as plt
import numpy as np
xpoints=np.array([0,10])
ypoints=np.array([0,100])
plt.plot(xpoints,ypoints)
plt.show()
我们通过两个点(0,0)和(10,100)绘制出折线图,x轴的点坐标就是0和10,y轴的点坐标就是0,100。分别将x轴的点和y轴的点存放到数组中,再调用plot画在画布上,最后show显示出来就搞定了。
2、熟悉plot()函数
plot() 用于画图它可以绘制点和线,语法格式如下:
#画单条线
plot([x], y, [fmt], *, data=None, **kwargs)
#画多条线
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
颜色字符:‘b’ 蓝色,‘m’ 洋红色,‘g’ 绿色,‘y’ 黄色,‘r’ 红色,‘k’ 黑色,‘w’ 白色,‘c’ 青绿色,‘#008000’ RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。
线条样式:‘‐’ 实线,‘‐‐’ 破折线,‘‐.’ 点划线,‘:’ 虚线。
标记字符:‘.’ 点标记,‘,’ 像素标记(极小点),‘o’ 实心圈标记,‘v’ 倒三角标记,‘^’ 上三角标记,‘>’ 右三角标记,‘<’ 左三角标记 等等。
纸上得来终觉浅,绝知此事要躬行,大家看下面几个实例就明白了。
我们可以绘制任意数量的点,只需确保两个轴上的点数相同即可。绘制一条不规则线,坐标为 (1, 3) 、 (2, 8) 、(6, 1) 、(8, 10),对应的两个数组为:[1, 2, 6, 8] 与 [3, 8, 1, 10]。
我们给线条变成红色,并且线条样式为虚线,再让每个点都被‘o’符号标记:
from matplotlib import pyplot as plt
import numpy as np
xpoints=np.array([1, 2, 6, 8])
ypoints=np.array([3, 8, 1, 10])
plt.plot(xpoints,ypoints,'r--o')
plt.show()
可以看到plot中多了个参数'r--o'
,它其实就是刚刚的[fmt],分别代表了颜色字符r,线条样式–,标记字符o,这三者的顺序随意,个数随意,非常方便。
这里参数改成了'.g-.'
,可以得知引号中第一个参数是符号标记‘.’ ; 第二个是颜色字符g ; 第三个是线条样式-. 。这样就变成了绿色的点划线,并且点都被标记出来了。
plt.plot(xpoints,ypoints,'.g-.')
如果我们不指定 x 轴上的点,则 x 会根据 y 的值来设置为 0, 1, 2, 3…N-1。
from matplotlib import pyplot as plt
import numpy as np
ypoints=np.array([2, 6, 2, 6,2])
plt.plot(ypoints,'.c:')
plt.show()
从下图可以看出 x 的值默认设置为 [0, 1, 2, 3, 4]。
3、轴标签和标题
我们可以使用 xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签。
from matplotlib import pyplot as plt
import numpy as np
xpoints=np.array([1,2,3,4,5])
ypoints=np.array([5,3,8,5,9])
plt.plot(ypoints,'oc-')
plt.xlabel('x-label')
plt.ylabel('y-label')
plt.show()
from matplotlib import pyplot as plt
import numpy as np
xpoints=np.array([1,2,3,4,5])
ypoints=np.array([5,3,8,5,9])
plt.plot(ypoints,'oc-')
plt.title('picture')
plt.xlabel('x-label')
plt.ylabel('y-label')
plt.show()
如果我们想使用中文显示标题和标签,只需要加入一行plt.rcParams['font.family']=['STFangsong']
,这样就可以使用系统字体中的“仿宋”。
from matplotlib import pyplot as plt
import numpy as np
plt.rcParams['font.family']=['STFangsong']
xpoints=np.array([1,2,3,4,5])
ypoints=np.array([5,3,8,5,9])
plt.plot(ypoints,'oc-')
plt.title('折线图')
plt.xlabel('博客写作时长')
plt.ylabel('涨粉数')
plt.show()
from matplotlib import pyplot as plt
import numpy as np
plt.rcParams['font.family']=['STFangsong']
xpoints=np.array([1,2,3,4,5])
ypoints=np.array([5,3,8,5,9])
plt.plot(ypoints,'oc-')
plt.title('折线图',size='30',color='#ABCDEF')
plt.xlabel('数量',size='15',color='blue')
plt.ylabel('价格',size='20',color='m')
plt.show()
用size设置字体大小;color设置字体颜色,可以缩写,可以完整写,也可以用rgb十六进制写。
最后,我们可以修改标题与标签的定位:
from matplotlib import pyplot as plt
import numpy as np
plt.rcParams['font.family']=['STFangsong']
xpoints=np.array([1,2,3,4,5])
ypoints=np.array([5,3,8,5,9])
plt.plot(ypoints,'oc-')
plt.title('折线图',loc='right',size='30',color='#409882')
plt.xlabel('数量',loc='left',size='15',color='blue')
plt.ylabel('价格',loc='top',size='20',color='m')
plt.show()
title() 方法提供了 loc 参数来设置标题显示的位置,可以设置为: ‘left’, ‘right’, 和 ‘center’, 默认值为 ‘center’。
xlabel() 方法提供了 loc 参数来设置 x 轴显示的位置,可以设置为: ‘left’, ‘right’, 和 ‘center’, 默认值为 ‘center’。
ylabel() 方法提供了 loc 参数来设置 y 轴显示的位置,可以设置为: ‘bottom’, ‘top’, 和 ‘center’, 默认值为 ‘center’。
我们可以使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图。
subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可。推荐大家使用subplot即可。
我们看下subplot函数的语法格式:subplot(nrows, ncols, index)
subplot( )将整个绘图区域分成 nrows 行和 ncols 列,然后从左到右,从上到下的顺序对每个子区域进行编号 1…N ,左上的子区域的编号为 1、右下的区域编号为 N,编号可以通过参数 index 来设置。
from matplotlib import pyplot as plt
import numpy as np
#plot1
xpoints=np.array([0,2,4,6,8])
ypoints=np.array([0,3,6,9,12])
plt.subplot(1,2,1)
plt.plot(xpoints,ypoints)
plt.xlabel('x')
plt.ylabel('y')
plt.title('plot1')
#plot2
x=np.array([1,3,5,8])
y=np.array([10,3,6,2])
plt.subplot(1,2,2)
plt.plot(x,y)
plt.title('plot2',color='m')
plt.show()
可以看到plot1和plot2在用plot前都加上了plt.subplot(1,2,1)
和plt.subplot(1,2,2)
,意思是说将画布分为一行两列,左边标号是1,右边标号是2,所以plot1就在左图位置,plot2就画在右图位置。就这么简单。
如果我们只在第一块区域画图,将plot2代码删去,运行一下。
from matplotlib import pyplot as plt
import numpy as np
#plot1
xpoints=np.array([0,2,4,6,8])
ypoints=np.array([0,3,6,9,12])
plt.subplot(1,2,1)
plt.plot(xpoints,ypoints)
plt.xlabel('x')
plt.ylabel('y')
plt.title('plot1')
plt.show()
可以看到只有plot1在画布的左侧,右侧没有图像,所以显示为空。
5、绘制散点图
我们可以使用 pyplot 中的 scatter() 方法来绘制散点图。scatter() 方法语法格式如下:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
参数说明
x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。
s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。
c:点的颜色,默认蓝色 ‘b’,也可以是个 RGB 或 RGBA 二维行数组。
marker:点的样式,默认小圆圈 ‘o’。
cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。
norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。
vmin,vmax:亮度设置,在 norm 参数存在时会忽略。
alpha:透明度设置,0-1 之间,默认 None,即不透明。
linewidths:标记点的长度。
其实上面这些参数不需要全部记住,常用的大小颜色记住即可,收藏之后,忘记了随时来看。
我们在画布上绘制下这8个点:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
plt.scatter(x, y)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20,50,100,200,500,1000,200,100])
plt.scatter(x, y,sizes=sizes)
plt.show()
通过定义一个sizes数组,数组元素就是每个点的大小:
我们还可以自定义点的颜色:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20,50,100,200,500,1000,200,100])
colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta"])
plt.scatter(x, y,sizes=sizes,c=colors)
plt.show()
colors是颜色数组,存储了每个点的颜色:
Matplotlib 模块提供了很多可用的颜色条。颜色条就像一个颜色列表,其中每种颜色都有一个范围从 0 到 100 的值。
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20,50,100,200,500,1000,200,100])
colors = np.array([10, 20, 30, 40, 50, 60, 70, 80])
plt.scatter(x, y,sizes=sizes,c=colors,cmap='viridis')
plt.colorbar()
plt.show()
设置颜色条需要使用 cmap 参数,默认值为 ‘viridis’,之后颜色值设置为 0 到 100 的数组。如果要显示颜色条,需要使用 plt.colorbar() 方法:
让别人相信你有搞定事情的毅力以及态度,做不出来绝不放弃,态度决定一切。