Python-Matplotlib常见统计图的绘制

简介: Matplotlib 是 Python 的绘图库,使绘图变得非常简单,在易用性和性能间取得了优异的平衡。借助 Matplotlib 库,可以方便的对进行数据分析,快速完成数据可视化。

Matplotlib库

Matplotlib 是 Python 的绘图库,它提供了一整套和 matlab 相似的命令 API,可以生成出版质量级别的精美图形,Matplotlib 使绘图变得非常简单,在易用性和性能间取得了优异的平衡。

曲线图

曲线图的绘制

作为绘图程序的 Hello World,我们将首先绘制一条简单的曲线。同时还将简单介绍

# plot_1.pyimportmatplotlib.pyplotaspltx=range(50)
y= [value*2forvalueinx]
plt.plot(x, y)
plt.show()

上述代码将会绘制曲线 y=2*x,其中 x 在 [0,50] 范围内,如下所示:

绘图19.png

可以看到窗口上方还包含多个图标,其中:

图标

解释

20210526200434521.png

此按钮用于将所绘制的图形另存为所需格式的图片,包括png,jpg,pdf,svg等常见格式

20210526200620854.png

此按钮用于调整图片的尺寸,边距等图片属性

20210526200838407.png

此按钮用于缩放图片,用于观察图形细节,单击此按钮后,在图形上使用鼠标左键拖拽进行放大,使用鼠标右键拖拽进行缩小

20210526201008106.png

此按钮用于移动图形,可以与“缩放”按钮结合观察放大后图片的具体细节,同时,单击此按钮后,在图形上使用鼠标右键拖拽可以缩放坐标轴的比例

20210526201100299.png

此按钮用于将图形恢复到其初始状态,取消缩放、移动等操作

Tips:plt.plot(x, y) 用于绘制一条曲线,其中,曲线点的 x 坐标在列表 x 中给出,曲线点的 y 坐标在列表y中给出。

由于 matplotlib 它只专注于绘图,因此如果想从文件中读取输入或进行一些中间计算,那么必须使用 Python 模块,但不用担心,matplotlib 与其他模块具有良好的兼容性,并不涉及过多的技巧。例如,要生成大量统计图形,可能需要使用科学计算包,如 Numpy 和 Python 的文件读取 I/O 模块。在接下来的讲解中会给出相应的示例。

结合Numpy库,绘制曲线图

绘制曲线 cos(x),x 在 [0, 2*pi] 区间内:

# cos_1.pyimportmathimportmatplotlib.pyplotaspltscale=range(100)
x= [(2*math.pi*i) /len(scale) foriinscale]
y= [math.cos(i) foriinx]
plt.plot(x, y)
plt.show()

若采用 Numpy 库,则可以使用以下等效代码:

# cos_2.pyimportnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0, 2*np.pi, 100)
y=np.cos(x)
plt.plot(x, y)
plt.show()

所绘制图形如下所示:

绘图20.png

Tips:虽然 Numpy 对于可视化而言并非必要,但可以看出使用 Numpy 库可以更加高效。

Numpy 可以一次对整个数组执行操作,可以使代码更高效,以绘制 [-10,10] 区间内的曲线 y=x3+5x-10 为例:

# plot_np.pyimportnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(-10, 10, 800)
y=x**3+5*x-10plt.plot(x, y)
plt.show()

绘制图形如下:

绘图21.png

绘制多曲线图  

很多时候我们需要对比多组数据,以发现数据间的异同,此时就需要在一张图片上绘制多条曲线——多曲线图,下图展示了在同一图片中绘制函数 y=x、y=x2,y=logex 以及 y=sin(x):

# plot_multi_curve.pyimportnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0.1, 2*np.pi, 100)
y_1=xy_2=np.square(x)
y_3=np.log(x)
y_4=np.sin(x)
plt.plot(x,y_1)
plt.plot(x,y_2)
plt.plot(x,y_3)
plt.plot(x,y_4)
plt.show()

上述脚本绘制图形如下:

绘图22.png

Tips:一条曲线的绘制需要调用一次 plt.plot(),而 plt.show() 只需调用一次。这种延迟呈现机制是 matplotlib 的核心,我们可以声明在任何时间绘制图形,但只有在调用 plt.show() 时才会渲染显示图形。

为了更好的说明这种延迟呈现机制,编写以下代码:

# deferred_rendering.pyimportnumpyasnpimportmatplotlib.pyplotaspltdefplot_func(x, y):
x_s=x[1:] -y[:-1]
y_s=y[1:] -x[:-1]
plt.plot(x[1:], x_s/y_s)
x=np.linspace(-5, 5, 200)
y=np.exp(-x**2)
plt.plot(x, y)
plot_func(x, y)
plt.show()

绘制图形如下:

绘图23.png

可以看到,尽管其中一个 plt.plot() 是在 plot_func 函数中调用的,它对图形的呈现没有任何影响,因为 plt.plot() 只是声明了我们要呈现的内容,但还没有执行渲染。因此可以使用此特性结合 for 循环、条件判断等语法完成复杂图形的绘制,同时也可以在同一张图中组合不同类型的统计图。

读取数据文件绘制曲线图

很多情况下数据都是存储于文件中,因此,需要首先读取文件中的数据,再进行绘制,说明起见,以 .txt 文件为例,其他诸如 Excel、CSV 文件可以使用 pandas、numpy 等库进行读取。

假设存在 data.txt 文件如下:

011225417526637

读取数据和绘制的代码如下:

# read_txt.pyimportmatplotlib.pyplotaspltx, y= [], []
forlineinopen('data.txt', 'r'):
values= [float(s) forsinline.split()]
x.append(values[0])
y.append(values[1])
plt.plot(x, y)
plt.show()

如果使用 Numpy 库,其等效代码可以写为:

importmatplotlib.pyplotaspltimportnumpyasnpdata=np.loadtxt('data.txt')
plt.plot(data[:,0], data[:,1])
plt.show()

绘图24.png

散点图

当绘制曲线图时,我们假设点与点之间存在序列关系。而散点图是简单地绘制点,它们之间并不存在连接。

importnumpyasnpimportmatplotlib.pyplotaspltdata=np.random.rand(1000, 2)
plt.scatter(data[:,0], data[:,1])
plt.show()

绘图29.png

Tips:函数 plt.scatter() 的调用方式与 plt.plot() 完全相同,分别将点的x和y坐标作为输入参数。

条形图

条形图具有丰富的表现形式,常见的类型包括单组条形图,多组条形图,堆积条形图和对称条形图等。因此在《Python-Matplotlib绘制条形图》中进行详细介绍。

饼图

饼图可以用于对比数量间的相对关系:

importmatplotlib.pyplotaspltdata= [10, 15, 30, 20]
plt.pie(data)
plt.show()

绘图25.png

Tips:plt.pie() 函数将一系列值作为输入,将值传递给matplolib,它就会自动计算各个值在饼图中的相对面积,并进行绘制。

直方图

直方图是概率分布的图形表示。事实上,直方图只是一种特殊的条形图。我们可以很容易地使用 matplotlib 的条形图函数,并进行一些统计运算来生成直方图。但是,直方图非常有用,因此 matplotlib 提供了一个更加方便的函数:

importnumpyasnpimportmatplotlib.pyplotaspltx=np.random.randn(1024)
plt.hist(x, bins=20)
plt.show()

绘图26.png

Tips:plt.hist() 函数的作用是:获取一系列值作为输入。值的范围将被划分为大小相等的范围(默认情况下数量为10),然后生成条形图,一个范围对应一个条柱,一个条柱的高度是相应范围内中的值的数量,条柱的数量由可选参数 bins 确定。

箱形图

箱形图可以通过方便地显示一组值的中位数、四分位数、最大值和最小值来比较值的分布。

importnumpyasnpimportmatplotlib.pyplotaspltdata=np.random.randn(200)
plt.boxplot(data)
plt.show()

绘图27.png

Tips:plt.boxplot() 函数的作用是:获取一组值,并自动计算平均值、中位数和其他统计量。

箱形图描述:

1. 图中黄线是分布的中位数。

2. 方形箱框包括从下四分位数 Q1 到上四分位数 Q3 的 50% 的数据。

3. 下盒须的下四分位延伸到 1.5(Q3-Q1)。

4. 上盒须从上四分位延伸至 1.5(Q3-Q1)。

5. 离盒须较远的数值用圆圈标记。

要在单个图形中绘制多个箱形图,对每个箱形图调用一次 plt.boxplot() 是不可行。它会将所有箱形图画在一起,形成一个混乱的、不可读的图形。如果想要到达符合要求的效果,只需在一次调用 plt.boxplot() 中,同时绘制多个箱形图即可,如下所示:

importnumpyasnpimportmatplotlib.pyplotaspltdata=np.random.randn(200, 6)
plt.boxplot(data)
plt.show()

绘图28.png

三角网格图

处理空间位置时会出现网格图。除了显示点之间的距离和邻域关系外,三角网格图也是表示地图的一种方便方法。

importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.triastridata=np.random.rand(200, 2)
triangles=tri.Triangulation(data[:,0], data[:,1])
plt.triplot(triangles)
plt.show()

绘图30.png

相关文章
|
数据可视化 Python
【100天精通Python】Day62:Python可视化_Matplotlib绘图基础,绘制折线图、散点图、柱状图、直方图和饼图,以及自定义图标外观和功能,示例+代码
【100天精通Python】Day62:Python可视化_Matplotlib绘图基础,绘制折线图、散点图、柱状图、直方图和饼图,以及自定义图标外观和功能,示例+代码
210 0
【python】使用matplotlib绘图使刻度线向内
成功使用代码实现matplotlib绘制的图刻度线朝内
【python】使用matplotlib绘图使刻度线向内
|
6月前
|
数据采集 前端开发 C++
Python通过matplotlib动态绘图实现中美GDP历年对比趋势动图
随着中国的各种实力的提高,经常在各种媒体上看到中国与各个国家历年的各种指标数据的对比,为了更清楚的展示历年的发展趋势,有的还做成了动图,看到中国各种指标数据的近年的不断逆袭,心中的自豪感油然而生。今天通过Python来实现matplotlib的动态绘图,将中美两国近年的GDP做个对比,展示中国GPD对美国的追赶态势,相信不久的将来中国的GDP数据将稳超美国。
154 2
|
数据可视化 Python
【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码
【100天精通Python】Day65:Python可视化_Matplotlib3D绘图mplot3d,绘制3D散点图、3D线图和3D条形图,示例+代码
372 0
|
数据可视化 数据挖掘 Python
Python 数据分析(二):Matplotlib 绘图
Python 数据分析(二):Matplotlib 绘图
157 0
Python 数据分析(二):Matplotlib 绘图
|
数据可视化 关系型数据库 Python
【100天精通Python】Day66:Python可视化_Matplotlib 3D绘图,绘制3D曲面图、3D填充图,3D极坐标图,示例+代码
【100天精通Python】Day66:Python可视化_Matplotlib 3D绘图,绘制3D曲面图、3D填充图,3D极坐标图,示例+代码
209 0
|
API Python
python matplotlib.axes相关属性设置(绘图方式、坐标轴、坐标刻度、文本等)
为什么要用 ax ,而不是 plt 呢? 因为在绘制子图过程中,对于每一个子图的不同设置,ax 可以直接实现对于单个子图的设定,因此掌握必要的 ax 设置命令尤为重要!
python matplotlib.axes相关属性设置(绘图方式、坐标轴、坐标刻度、文本等)
|
人工智能 数据可视化 Python
Python Matplotlib库:基本绘图补充
上期我们讲了 Matplotlib 库的基本语法,并以折线图为例,绘制了我们的第一幅图表。这期我们来说说如何用 Matplotlib 库绘制其他常用图表。plot()是 Matplotlib 库中绘制折线图的方法,而绘制散点图,我们会使用scatter()。在 Matplotlib 库中,我们使用bar()方法来绘制柱状图。使用stem()方法来绘制火柴图。使用step()方法来绘制阶梯图。使用fill_between()方法来填充一段区间。
169 0
Python Matplotlib库:基本绘图补充
|
数据挖掘 Python
【Python数据分析 - 1】:matplotlib绘图架构Part1【折线图和基础绘图】
【Python数据分析 - 1】:matplotlib绘图架构Part1【折线图和基础绘图】
301 0
【Python数据分析 - 1】:matplotlib绘图架构Part1【折线图和基础绘图】
|
JSON 数据格式 Python
《Python编程:从入门到实践》学习记录(16)项目-解析CSV与JSON;matplotlib, pygal绘图
《Python编程:从入门到实践》学习记录(16)项目-解析CSV与JSON;matplotlib, pygal绘图
《Python编程:从入门到实践》学习记录(16)项目-解析CSV与JSON;matplotlib, pygal绘图

相关实验场景

更多
下一篇
无影云桌面