Matplotlib--用Python创建各种数据可视化图形
Posted 小白兔白又白i
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matplotlib--用Python创建各种数据可视化图形相关的知识,希望对你有一定的参考价值。
前言
数据可视化是与他人共享数据的重要方法。有些人将可视化称为图解、图表或图形。在本文中,这些名称是同义词。
Python有许多第三方包,用于数据可视化。事实上,有这么多,它可能有点压倒性。其中最古老和最受欢迎的是Matplotlib。Matplotlib以在Python中创建静态、动画和交互式可视化而闻名。
您可以使用Matplotlib创建许多不同类型的绘图和图表。它还与其他数据科学和数学库(如NumPy和熊猫。您还会发现Matplotlib可以使用Python的大多数GUI工具包,例如Tkinter、wxPython和PyQt。因为Matplotlib是众所周知的,所以本文将介绍它的图形化包。
您将了解以下主题:
- 用PyPlot创建一个简单的线条图
- 创建条形图
- 创建饼图
- 添加标签
- 在情节中添加标题
- 创造传奇
- 显示多个数字
让我们开始用Matplotlib作图吧!
安装Matplotlib
您需要安装Matplotlib才能使用它。幸运的是,这样做很容易。pip:
python -m pip install matplotlib
这将安装Matplotlib以及它所需的任何依赖项。现在你已经准备好开始绘图了!
用PyPlot创建一个简单的线条图
创建图表(或图表)是使用绘图包的主要目的。Matplotlib有一个名为pyplot用来创建图表。要开始,继续创建一个名为line_plot.py并添加以下代码:
# line_plot.py
import matplotlib.pyplot as plt
def line_plot(numbers):
plt.plot(numbers)
plt.ylabel('Random numbers')
plt.show()
if __name__ == '__main__':
numbers = [2, 4, 1, 6]
line_plot(numbers)
你在这里进口matplotlib.pyplot如plt。然后创建一个line_plot()它接受Python的数字列表。若要绘制数字,请使用plot()功能。您还可以向y轴添加一个标签。最后,你打电话show()显示情节。
现在,您应该可以看到如下所示的窗口:
现在您知道了如何使用Matplotlib创建一个简单的线条图!现在,您将在下一节中了解如何制作条形图。
创建条形图
使用Matplotlib创建条形图与创建线条图非常相似。只是需要一些额外的争论。继续创建一个名为bar_chart.py并在其中输入以下代码:
# bar_chart.py
import matplotlib.pyplot as plt
def bar_chart(numbers, labels, pos):
plt.bar(pos, numbers, color='blue')
plt.xticks(ticks=pos, labels=labels)
plt.show()
if __name__ == '__main__':
numbers = [2, 1, 4, 6]
labels = ['Electric', 'Solar', 'Diesel', 'Unleaded']
pos = list(range(4))
bar_chart(numbers, labels, pos)
创建条形图时,请使用bar(),则传递x轴的值列表。然后你传递给酒吧的高度列表。您还可以选择为条形图设置颜色。在这种情况下,您将它们设置为“蓝色”。接下来,设置xticks(),这是沿着x轴应该出现的勾号。您还传递了与滴答对应的标签列表。
继续运行以下代码,您将看到以下图表:
您还可以使用Matplotlib制作水平条形图。你所需要做的就是改变bar()到barh()。创建一个名为bar_chartsh.py并添加以下代码:
# bar_charth.py
import matplotlib.pyplot as plt
def bar_charth(numbers, labels, pos):
plt.barh(pos, numbers, color='blue')
plt.yticks(ticks=pos, labels=labels)
plt.show()
if __name__ == '__main__':
numbers = [2, 1, 4, 6]
labels = ['Electric', 'Solar', 'Diesel', 'Unleaded']
pos = list(range(4))
bar_charth(numbers, labels, pos)
这里还有另外一个鬼鬼祟祟的变化。你能认出它吗?更改是,因为它现在是一个水平条形图,所以您需要将yticks()而不是xticks()否则看起来就不太好了。
一旦准备就绪,运行代码,您将看到以下内容:
这看起来很棒,而且它根本不需要太多的代码!现在,让我们了解如何使用Matplotlib创建饼图。
创建饼图
派图有点不同。要创建饼图,您将使用Matplotlib的subplots()函数,该函数返回Figure和一个Axes对象。要了解它是如何工作的,请创建一个名为pie_chart_plain.py然后把这个代码放进去:
# pie_chart_plain.py
import matplotlib.pyplot as plt
def pie_chart():
numbers = [40, 35, 15, 10]
labels = ['Python', 'Ruby', 'C++', 'php']
fig1, ax1 = plt.subplots()
ax1.pie(numbers, labels=labels)
plt.show()
if __name__ == '__main__':
pie_chart()
在这段代码中,您可以创建subplots()然后使用pie()方法Axes对象。您将像以前一样传递一个数字列表,以及一个标签列表。然后,当您运行代码时,您将看到您的饼图:
对于这么短的一段代码来说,这是相当不错的。但是你可以把你的饼图做得更好。创建一个名为pie_chart_fancy.py并添加以下代码以查看如何:
# pie_chart_fancy.py
import matplotlib.pyplot as plt
def pie_chart():
numbers = [40, 35, 15, 10]
labels = ['Python', 'Ruby', 'C++', 'PHP']
# Explode the first slice (Python)
explode = (0.1, 0, 0, 0)
fig1, ax1 = plt.subplots()
ax1.pie(numbers, explode=explode, labels=labels,
shadow=True, startangle=90,
autopct='%1.1f%%')
ax1.axis('equal')
plt.show()
if __name__ == '__main__':
pie_chart()
在本例中,您可以使用explode参数可以告诉饼图“爆炸”或从饼饼中删除一片。在本例中,删除第一个片段,它对应于“Python”。您还添加了一个shadow派图上。您可以告诉您的饼图逆时针旋转一定数量的度,通过设置startangle。如果要显示切片百分比,可以使用autopct,它将使用Python的字符串内插语法。
运行此代码时,饼图现在将如下所示:
是不是很干净?你的饼图现在看起来更漂亮了!现在是时候学习如何添加标签到您的其他图形!
添加标签
在绘制数据时,通常需要对轴进行标记。属性来标记x轴。xlabel()函数,您可以使用相应的ylabel()功能。要了解这是如何工作的,请创建一个名为bar_chart_labels.py并将以下代码添加到其中:
# bar_chart_labels.py
import matplotlib.pyplot as plt
def bar_chart(numbers, labels, pos):
plt.bar(pos, numbers, color='blue')
plt.xticks(ticks=pos, labels=labels)
plt.xlabel('Vehicle Types')
plt.ylabel('Number of Vehicles')
plt.show()
if __name__ == '__main__':
numbers = [2, 1, 4, 6]
labels = ['Electric', 'Solar', 'Diesel', 'Unleaded']
pos = list(range(4))
bar_chart(numbers, labels, pos)
在这里,你打电话给两个人xlabel()和ylabel()并将它们设置成不同的字符串。这分别在图的下面和图的左边添加了一些解释性文本。结果如下:
看起来挺不错的。您的图表更容易理解,但它缺少一个标题。您将在下一节中学习如何做到这一点!
在情节中添加标题
使用Matplotlib向图形添加标题非常简单。实际上,您所需要做的就是使用title()函数添加一个。要了解如何创建一个名为bar_chart_title.py并将以下代码添加到其中:
# bar_chart_title.py
import matplotlib.pyplot as plt
def bar_chart(numbers, labels, pos):
plt.bar(pos, [4, 5, 6, 3], color='green')
plt.bar(pos, numbers, color='blue')
plt.xticks(ticks=pos, labels=labels)
plt.title('Gas Used in Various Vehicles')
plt.xlabel('Vehicle Types')
plt.ylabel('Number of Vehicles')
plt.show()
if __name__ == '__main__':
numbers = [2, 1, 4, 6]
labels = ['Electric', 'Solar', 'Diesel', 'Unleaded']
pos = list(range(4))
bar_chart(numbers, labels, pos)
这里的主要更改是在第9行调用title()然后传入一根绳子。这设置了图表的标题,默认情况下,它沿着顶部居中。可以通过设置loc参数为“左”或“右”,但不能指定标题位于顶部以外的任何位置。还有一个fontdict参数,可用于控制标题字体的外观。
您还可以向图中添加一个新的条形图。这可以帮助您了解堆叠的条形图是什么样子,也可以帮助您为下一节做好准备。
下面是您的图表现在的样子:
这张图看上去更好,但仍然遗漏了一些东西。噢!你需要一个传奇!接下来我们来看看怎么做。
创造传奇
向Matplotlib图添加一个图例也很简单。您将使用legend()函数添加一个。创建一个名为bar_chart_legend.py。然后,将以下代码添加到其中:
# bar_chart_legend.py
import matplotlib.pyplot as plt
def bar_chart(numbers, labels, pos):
plt.bar(pos, [4, 5, 6, 3], color='green')
plt.bar(pos, numbers, color='blue')
plt.xticks(ticks=pos, labels=labels)
plt.xlabel('Vehicle Types')
plt.ylabel('Number of Vehicles')
plt.legend(['First Label', 'Second Label'], loc='upper left')
plt.show()
if __name__ == '__main__':
numbers = [2, 1, 4, 6]
labels = ['Electric', 'Solar', 'Diesel', 'Unleaded']
pos = list(range(4))
bar_chart(numbers, labels, pos)
在这里添加一个legend()就在你面前show()图表。创建图例时,可以通过传递字符串列表来设置标签。列表应该与图中的图数相匹配。还可以使用loc参数。
运行此代码时,您将看到您的图形更新如下:
现在,您的图包含了您希望在图中包含的所有正常组件。至此,您已经看到了许多使用Matplotlib可以完成的任务。最后一个要学习的主题是如何使用Matplotlib添加多个数字。
显示多个数字
Matplotlib允许您在展示之前创建几个情节。这使您可以同时处理多个数据集。有几种不同的方法可以做到这一点。您将看到最简单的方法之一。
创建一个名为multiple_figures.py并添加以下代码:
# multiple_figures.py
import matplotlib.pyplot as plt
def line_plot(numbers, numbers2):
first_plot = plt.figure(1)
plt.plot(numbers)
second_plot = plt.figure(2)
plt.plot(numbers2)
plt.show()
if __name__ == '__main__':
numbers = [2, 4, 1, 6]
more_numbers = [5, 1, 10, 3]
line_plot(numbers, more_numbers)
在这里,您创建了两个线条图。在你策划之前,你打电话给figure(),它为调用后的绘图创建一个顶级容器。因此,第一个图添加到图一,第二个图添加到图2。show()最后,Matplotlib将打开两个窗口,每个图分别显示。
运行代码,您将在计算机上看到以下两个窗口:
Matplotlib还支持向单个窗口添加两个或多个绘图。若要查看该文件的工作原理,请创建另一个新文件并命名此文件。multiple_plots.py。为了使事情更有趣,您将在本例中使用NumPy创建这两个情节。
注:如果您还没有安装NumPy,则需要安装NumPy才能使此示例正常工作。
此示例基于Matplotlib文档中的一个:
# multiple_plots.py
import matplotlib.pyplot as plt
import numpy as np
def multiple_plots():
# Some example data to display
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
fig, axs = plt.subplots(2)
fig.suptitle('Vertically stacked subplots')
axs[0].plot(x, y)
axs[1].plot(x, -y)
plt.show()
if __name__ == '__main__':
multiple_plots()
在这里,您创建了相当于两个独立的正弦波图。要使它们都出现在同一个窗口中,您可以调用subplots(),这是在单个调用中创建多个数字的方便实用程序。然后,您可以使用Axes对象来绘制用NumPy创建的数据。
结果如下所示:
如果不想使用NumPy,可以绘制上一个示例中的两组数字。事实上,你应该试试。继续创建一个名为multiple_plots2.py并添加以下代码:
# multiple_plots2.py
import matplotlib.pyplot as plt
def multiple_plots():
numbers = [2, 4, 1, 6]
more_numbers = [5, 1, 10, 3]
fig, axs = plt.subplots(2)
fig.suptitle('Vertically stacked subplots')
axs[0].plot(numbers)
axs[1].plot(more_numbers)
plt.show()
if __name__ == '__main__':
multiple_plots()
在此代码中,您将完全删除NumPy代码,并从前面的示例中添加两个数字列表。然后使用Axes对象。
这导致了以下堆叠情节:
此时,您应该很好地掌握了如何使用Matplotlib创建多个图形和叠加的绘图。
包起来
Matplotlib是一个很好的包,您可以使用它来创建各种整洁的图形。令人惊讶的是,您需要编写几行代码才能根据数据创建有用的绘图。在本文中,您了解了以下主题:
- 用PyPlot创建一个简单的线条图
- 创建条形图
- 创建饼图
- 添加标签
- 在情节中添加标题
- 创造传奇
- 显示多个数字
Matplotlib非常强大,有许多特性在这里没有涉及。您可以使用Matplotlib创建许多其他类型的可视化。
有一个较新的包,名为海航这是建立在Matplotlib之上的,使它的图形看起来更好。还有许多其他完全独立的Python图形化包。您会发现Python支持几乎任何类型的图,并且可能有许多您不知道的图。
非常感谢大家的阅读!
以上是关于Matplotlib--用Python创建各种数据可视化图形的主要内容,如果未能解决你的问题,请参考以下文章
Python数据可视化——使用Matplotlib创建散点图
无法让 matplotlib 事件处理程序与 Boost.Python 一起使用
Python 绘图包 Matplotlib Pyplot 教程