Python-Matplotlib可视化(1)——一文详解常见统计图的绘制

本文详细介绍了如何使用Python的Matplotlib库读取数据并绘制各种图表,如散点图、条形图(包括单组、多组、堆积和对称)、饼图、直方图和箱形图,以及三角网格图。此外,还提到了使用Numpy库的优化。文章旨在帮助读者掌握Matplotlib在数据可视化中的应用。
摘要由CSDN通过智能技术生成

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

read_txt.py

import matplotlib.pyplot as plt

x, y = [], []

for line in open(‘data.txt’, ‘r’):

values = [float(s) for s in line.split()]

x.append(values[0])

y.append(values[1])

plt.plot(x, y)

plt.show()

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

import matplotlib.pyplot as plt

import numpy as np

data = np.loadtxt(‘data.txt’)

plt.plot(data[:,0], data[:,1])

plt.show()

绘制图形

散点图


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

import numpy as np

import matplotlib.pyplot as plt

data = np.random.rand(1000, 2)

plt.scatter(data[:,0], data[:,1])

plt.show()

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

条形图


条形图具有丰富的表现形式,常见的类型包括单组条形图,多组条形图,堆积条形图和对称条形图等。

单组条形图

条形图的每种表现形式都可以绘制成垂直条形图或水平条形图,以单组条形图的两种绘制方式为例。

垂直条形图

import matplotlib.pyplot as plt

data = [10., 20., 5., 15.]

plt.bar(range(len(data)), data)

plt.show()

垂直条形图Tips:plt.plot()函数的作用是:接收两个参数,包括每个条形的x坐标和每个条行的高度。

通过可选参数width,pyplot.bar()提供了一种控制条形图中条状宽度的方法:

import matplotlib.pyplot as plt

data = [10., 20., 5., 15.]

plt.bar(range(len(data)), data, width=0.5)

plt.show()

修改条形图宽度

水平条形图

如果更喜欢水平条形外观,就可以使用plt.barh()函数,在用法方面与plt.bar()基本相同,但是修改条形宽度(或者在水平条形图中应该称为高度)的参数需要使用height

import matplotlib.pyplot as plt

data = [10., 20., 5., 15.]

plt.barh(range(len(data)), data, height=0.5)

plt.show()

水平条形图

多组条形图

当需要比较不同年份相应季度的销量等此类需求时,我们可能需要多组条形图。

import numpy as np

import matplotlib.pyplot as plt

data = [[10., 20., 30., 20.],[40., 25., 53., 18.],[6., 22., 52., 19.]]

x = np.arange(4)

plt.bar(x + 0.00, data[0], color = ‘b’, width = 0.25)

plt.bar(x + 0.25, data[1], color = ‘g’, width = 0.25)

plt.bar(x + 0.50, data[2], color = ‘r’, width = 0.25)

plt.show()

多组条形图

堆积条形图

通过使用plt.bar()函数中的可选参数,可以绘制堆积条形图。

import matplotlib.pyplot as plt

y_1 = [3., 25., 45., 22.]

y_2 = [6., 25., 50., 25.]

x = range(4)

plt.bar(x, y_1, color = ‘b’)

plt.bar(x, y_2, color = ‘r’, bottom = y_1)

plt.show()

堆积条形图Tips:plt.bar()函数的可选参数bottom允许指定条形图的起始值。

可以结合for循环,利用延迟呈现机制堆叠更多的条形:

import numpy as np

import matplotlib.pyplot as plt

data = np.array([[5., 30., 45., 22.], [5., 25., 50., 20.], [1., 2., 1., 1.]])

x = np.arange(data.shape[1])

for i in range(data.shape[0]):

plt.bar(x, data[i], bottom = np.sum(data[:i], axis = 0))

plt.show()

堆叠条形图

对称条形图

一个简单且有用的技巧是对称绘制两个条形图。例如想要绘制不同年龄段的男性与女性数量的对比:

import numpy as np

import matplotlib.pyplot as plt

w_pop = np.array([5., 30., 45., 22.])

m_pop = np.array( [5., 25., 50., 20.])

x = np.arange(4)

plt.barh(x, w_pop)

plt.barh(x, -m_pop)

plt.show()

对称条形图

图中女性人口的条形图照常绘制。然而,男性人口的条形图的条形图的条形图向左延伸,而不是向右延伸。可以使用数据的负值来快速实现对称条形图的绘制。

饼图


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

import matplotlib.pyplot as plt

data = [10, 15, 30, 20]

plt.pie(data)

plt.show()

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

直方图


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

import numpy as np

import matplotlib.pyplot as plt

x = np.random.randn(1024)

plt.hist(x, bins = 20)

plt.show()

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

箱形图


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

import numpy as np

import matplotlib.pyplot as plt

data = np.random.randn(200)

plt.boxplot(data)

plt.show()

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

箱形图描述:

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

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

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

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

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

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

import numpy as np

import matplotlib.pyplot as plt

data = np.random.randn(200, 6)

plt.boxplot(data)

plt.show()

多箱形图

三角网格图


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

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.tri as tri

data = np.random.rand(200, 2)

triangles = tri.Triangulation(data[:,0], data[:,1])

plt.triplot(triangles)

plt.show()

三角网格图Tips:代码中导入了matplotlib.tri模块,该模块提供了从点计算三角网格的辅助函数。

系列链接


Python-Matplotlib可视化(2)——自定义颜色绘制精美统计图

Python-Matplotlib可视化(3)——自定义样式绘制精美统计图

Python-Matplotlib可视化(4)——添加注释让统计图通俗易懂

Python-Matplotlib可视化(5)——添加自定义形状绘制复杂图形

Python-Matplotlib可视化(6)——自定义坐标轴让统计图清晰易懂
Python-Matplotlib可视化(7)——多方面自定义统计图绘制
Python-Matplotlib可视化(8)——图形的输出与保存
Python-Matplotlib可视化(9)——精通更多实用图形的绘制
Python-Matplotlib可视化(10)——一文详解3D统计图的绘制

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值