教你快速上手Pyplot,画出各种你想要的图

简介: 教你快速上手Pyplot,画出各种你想要的图

一、Pyplot简介

Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。


Pyplot 是常用的绘图模块,能很方便让用户绘制 2D 图表。


Pyplot 包含一系列绘图函数的相关函数,每个函数会对当前的图像进行一些修改,例如:给图像加上标记,生成新的图像,在图像中产生新的绘图区域等等。


二、Pyplot导入

我们可以使用 import 导入 pyplot 库,并设置一个别名 plt:


from matplotlib import pyplot as plt

这样我们就可以使用 plt 来引用 pyplot 包的方法。


三、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显示出来就搞定了。

image.png

🚄2、熟悉plot()函数


plot() 用于画图它可以绘制点和线,语法格式如下:


#画单条线
plot([x], y, [fmt], *, data=None, **kwargs)
#画多条线
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)

x, y:点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以列表或数组。

fmt:可选,定义基本格式(如颜色、标记和线条样式)。

**kwargs:可选,用在二维平面图上,设置指定属性,如标签,线的宽度等。

颜色字符:‘b’ 蓝色,‘m’ 洋红色,‘g’ 绿色,‘y’ 黄色,‘r’ 红色,‘k’ 黑色,‘w’ 白色,‘c’ 青绿色,’#008000’ RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。


线条样式:’‐’ 实线,’‐‐’ 破折线,’‐.’ 点划线,’:’ 虚线。


标记字符:’.’ 点标记,’,’ 像素标记(极小点),‘o’ 实心圈标记,‘v’ 倒三角标记,’^’ 上三角标记,’>’ 右三角标记,’<’ 左三角标记 等等。


纸上得来终觉浅,绝知此事要躬行,大家看下面几个实例就明白了。

image.png

我们可以绘制任意数量的点,只需确保两个轴上的点数相同即可。绘制一条不规则线,坐标为 (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,这三者的顺序随意,个数随意,非常方便。

image.png

这里参数改成了'.g-.',可以得知引号中第一个参数是符号标记‘.’ ; 第二个是颜色字符g ; 第三个是线条样式-. 。这样就变成了绿色的点划线,并且点都被标记出来了。


plt.plot(xpoints,ypoints,'.g-.')

image.png


如果我们不指定 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]。

image.png

🚉 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()

image.png我们可以使用 title() 方法来设置标题。


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()

image.png

如果我们想使用中文显示标题和标签,只需要加入一行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()

image.png

此外我们还可以自定义字体的样式:


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十六进制写。

image.png

最后,我们可以修改标题与标签的定位:


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’。


image.png

🚀 4、绘制多图


我们可以使用 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就画在右图位置。就这么简单。

image.png

如果我们只在第一块区域画图,将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在画布的左侧,右侧没有图像,所以显示为空。

image.png

🚤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()

我们看下效果图:

image.png

我们来设置散点的大小:

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数组,数组元素就是每个点的大小:

image.png

我们还可以自定义点的颜色:


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是颜色数组,存储了每个点的颜色:

image.png

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() 方法:

image.png


以上就是所有pyplot的基本用法了,三连不迷路。

目录
相关文章
|
5月前
|
数据可视化 数据挖掘 图形学
seaborn从入门到精通03-绘图功能实现01-关系绘图
seaborn从入门到精通03-绘图功能实现01-关系绘图
|
Python
matplotlib绘制箱形图之基本配置——万能模板案例(一)
matplotlib绘制箱形图之基本配置——万能模板案例
859 0
matplotlib绘制箱形图之基本配置——万能模板案例(一)
|
4月前
|
Python
matplotlib绘制动态瀑布图
matplotlib绘制动态瀑布图
|
5月前
|
数据可视化 数据挖掘 Linux
seaborn从入门到精通03-绘图功能实现03-分布绘图distributional plots
seaborn从入门到精通03-绘图功能实现03-分布绘图distributional plots
seaborn从入门到精通03-绘图功能实现03-分布绘图distributional plots
|
5月前
|
数据可视化 API 前端开发
seaborn从入门到精通03-绘图功能实现02-分类绘图Categorical plots
seaborn从入门到精通03-绘图功能实现02-分类绘图Categorical plots
seaborn从入门到精通03-绘图功能实现02-分类绘图Categorical plots
|
9月前
|
存储 NoSQL 程序员
聊聊「画图」和工具
关于画图和工具选择;两句话能说明白;【1】示意清楚的都是「好图」;【2】免费,够用,支持云存储,都是好的画图「工具」;
88 0
|
10月前
|
人工智能 前端开发 数据处理
Python实现画图软件功能
Python实现画图软件功能
81 0
|
11月前
|
数据可视化
Hisat2+FeatureCounts+DESeq2流程+作图!
Hisat2+FeatureCounts+DESeq2流程+作图!
|
12月前
|
人工智能 数据可视化
如何一步步提高图形 B 格?以 ggplot 绘图为例
如何一步步提高图形 B 格?以 ggplot 绘图为例
101 0
|
数据可视化
Qt开发技术:Q3D图表开发笔记(一):Q3DScatter三维散点图介绍、Demo以及代码详解
qt提供了q3d进行三维开发,虽然这个框架没有得到大量运用也不是那么成功,性能上也有很大的欠缺,但是普通的点到为止的应用展示还是可以的。
Qt开发技术:Q3D图表开发笔记(一):Q3DScatter三维散点图介绍、Demo以及代码详解