Python提供了丰富的选项来可视化数据。 我将通过创建带有分组条形图的条形图向您展示Matplotlib中绘制的基础知识。 它显示了1966年至2020年英国的选举结果:
有关Python绘图库的完整比较,请参见《在Python中绘图数据的7种最受欢迎的方法》 。
精确而强大
Matplotlib是密谋动物园的鳄鱼。 它已经存在了一段时间,但仍然有很多咬人的地方。 Matplotlib使您可以精确控制绘图,但是,就像任何精确而强大的工具一样,有时这会迫使您比您想的要认真思考。
要了解我的意思,让我们开始创建多线图。 在继续之前,请注意,您可能需要调整Python环境以使此代码运行,包括以下内容。
- 运行最新版本的Python( Linux , Mac和Windows的说明 )
- 验证您正在运行与这些库一起使用的Python版本
数据可在线获得,并可使用熊猫导入:
import pandas
as pd
df
= pd.
read_csv
(
'https://anvil.works/blog/img/plotting-in-python/uk-election-results.csv'
)
现在我们准备出发了。 首先导入Matplotlib和Numpy:
import matplotlib.
pyplot
as plt
import numpy
as np
它具有广泛的形式 ,意味着每个政党都有一个专栏:
year conservative labour liberal others
0 1966 253 364 12 1
1 1970 330 287 6 7
2 Feb 1974 297 301 14 18
.. ... ... ... ... ...
12 2015 330 232 8 80
13 2017 317 262 12 59
14 2019 365 202 11 72
接下来,告诉Matplotlib,您正在创建一个带有单轴的图形。 它为您提供了一个Figure and Axis对象。 如果您有多个子图,则有一个“人形”和多个“轴”。
# Create a Figure with one Axis on it
fig
, ax
= plt.
subplots
(
)
制作条形图
现在添加条形图本身。 多条形图是通过在同一轴上绘制四个单独的条形图制成的,每个条形图偏移一定量,因此它们可以并排显示。 这意味着您必须弄清楚如何计算每个条形图的偏移量,并且如果您想添加另一个政党,则必须重新考虑计算。
# The x-values of the bars.
years
= df
[
'year'
]
x
= np.
arange
(
len
( years
)
)
# The width of the bars (1 = the whole width of the 'year group')
width
=
0.15
# Create the bar charts!
ax.
bar
( x -
3 *width/
2
, df
[
'conservative'
]
, width
, label
=
'Conservative'
, color
=
'#0343df'
)
ax.
bar
( x - width/
2
, df
[
'labour'
]
, width
, label
=
'Labour'
, color
=
'#e50000'
)
ax.
bar
( x + width/
2
, df
[
'liberal'
]
, width
, label
=
'Liberal'
, color
=
'#ffff14'
)
ax.
bar
( x +
3 *width/
2
, df
[
'others'
]
, width
, label
=
'Others'
, color
=
'#929591'
)
轴标签和图例
那是它自己创建的图,但是您仍然需要添加一些轴标签和图例:
# Notice that features like labels and titles are added in separate steps
ax.
set_ylabel
(
'Seats'
)
ax.
set_title
(
'UK election results'
)
ax.
set_xticks
( x
)
# This ensures we have one tick per year, otherwise we get fewer
ax.
set_xticklabels
( years.
astype
(
str
) .
values
, rotation
=
'vertical'
)
ax.
legend
(
)
使魔术发生
最后,调用魔术词以使绘图显示在屏幕上:
plt. show ( )
嘿,presto!
花费了一些脑力,但是您有一个不错的,干净的情节。
功率
您可能会看到此API如何为您提供大量功能。 假设您要绘制一条线来显示保守党和工党之间的席位差异。 进行操作时,在背景中添加一组网格线并设置一些合理的Y轴限制:
ax.
plot
( x
, df
[
'conservative'
] - df
[
'labour'
]
, label
=
'Conservative lead over Labour'
, color
=
'black'
, linestyle
=
'dashed'
)
ax.
grid
( color
=
'#eeeeee'
)
ax.
set_axisbelow
(
True
)
ax.
set_ylim
(
[ -
500
,
500
]
)
如果您希望在其他地方运行此程序,则可以在此处将此示例作为Anvil应用程序复制(注意:Anvil需要注册才能使用)。
很棒的图表,但是我们可以简化它吗?
所有这些功能都很强大,但是人们总是想做一些情节。 为什么有人不能将Matplotlib包装在使事情变得简单得多的高级界面中? 这样就完成了,叫做Seaborn 。 下次我们会调查。
同时,祝贺您第一次使用Matplotlib可视化!
本文基于如何在Anvil的博客上使用Matplotlib进行绘图,并在获得许可的情况下重复使用。