Matplotlib 绘制多组柱状图
Matplotlib 是一个 Python 的可视化库,用于绘制各种静态、动态、交互式的图表。该库的主要优点是支持简单的代码方式实现用户需求,还提供丰富的样式选项和可定制性,支持海量的可视化类型和颜色方案,可通过多种输出方式对图表进行保存和分享。Matplotlib 是数据科学领域中绘制可视化图表的标准工具之一,被广泛应用于科学研究、统计分析、数据分析、机器学习等领域。
Matplotlib 内置的主要绘图函数包括折线图、散点图、柱状图、饼图、直方图、热力图、等高线图、3D 图等,其中柱状图可用于展现分类变量和数值变量的关系,在可视化分析中较为常用。
阅读更多:Matplotlib 教程
示例数据集
在接下来的例子中,我们使用一个关于不同城市的人口数据集来说明如何绘制多组柱状图。
该数据集中包括三列数据:City、Population_2020 和 GDP_2020,其中 City 代表城市名称,Population_2020 代表该城市在 2020 年的人口数量,GDP_2020 代表该城市在 2020 年的 GDP 数量(以万亿为单位)。
以 Python 代码形式展示这个数据集:
import pandas as pd
data = {'City': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Chengdu'],
'Population_2020': [2154, 2424, 1503, 1303, 1638],
'GDP_2020': [3.2, 3.7, 2.8, 2.6, 1.7]}
df = pd.DataFrame(data)
绘制多组柱状图
我们通过 Matplotlib 中的 bar()
函数来绘制柱状图,该函数支持多组柱状图的绘制。
在多组柱状图中,我们需要使用多个 bar()
函数来绘制每一组柱状图。为了使每组柱形图不重叠,我们需要对横坐标进行微调,使用 numpy
库中的 arange()
函数生成每组柱形图的横坐标。
下面的代码演示了如何绘制该数据集的两组柱状图。
import numpy as np
import matplotlib.pyplot as plt
# 绘制 Population_2020 柱状图
x = np.arange(len(df['City']))
width = 0.35
fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, df['Population_2020'], width, label='Population_2020')
# 绘制 GDP_2020 柱状图
rects2 = ax.bar(x + width/2, df['GDP_2020'], width, label='GDP_2020')
# 添加图例
ax.legend()
# 添加轴标签和标题
ax.set_ylabel('Population/GDP (trillion)')
ax.set_xlabel('Cities')
ax.set_title('Population and GDP of China Cities in 2020')
# 调整横坐标坐标轴标签
ax.set_xticks(x)
ax.set_xticklabels(df['City'])
# 自适应调整坐标轴
fig.tight_layout()
plt.show()
从上述代码和图表中可以看到,我们首先使用 numpy
库中的 arange()
函数生成每组柱形图的横坐标,同时使用 width
定义每组柱形图的宽度。由于我们要绘制两组柱状图,因此将横坐标减去 width/2
和加上 width/2
。在绘制第一组柱状图时,我们将其赋值给变量 rects1
,在绘制第二组柱状图时,将其赋值给变量 rects2
,以便在后续添加图例时使用。
使用 ax.legend()
函数添加图例,ax.set_xticks()
函数设置横坐标所在位置,ax.set_xticklabels()
函数设置横坐标标签,fig.tight_layout()
函数自适应调整坐标轴。
添加样式
现在,我们已经成功地绘制出多组柱状图,但是默认情况下,绘制出来的图表可能不够美观,我们可以通过添加样式来美化我们的图表。
在 Matplotlib 中,可以通过 ax.set()
函数对图表的样式进行设置,例如颜色、字体、背景等。下面的代码演示了如何对多组柱状图添加样式。
import numpy as np
import matplotlib.pyplot as plt
# 绘制 Population_2020 柱状图
x = np.arange(len(df['City']))
width = 0.35
fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, df['Population_2020'], width, label='Population_2020', color='red')
# 绘制 GDP_2020 柱状图
rects2 = ax.bar(x + width/2, df['GDP_2020'], width, label='GDP_2020', color='blue')
# 添加图例
ax.legend()
# 添加轴标签和标题
ax.set_ylabel('Population/GDP (trillion)', fontsize=14)
ax.set_xlabel('Cities', fontsize=14)
ax.set_title('Population and GDP of China Cities in 2020', fontsize=16)
# 设置用于y轴刻度的数据值的字号
ax.tick_params(axis='y', labelsize=12)
# 设置用于x轴刻度的数据值的字号和角度
ax.tick_params(axis='x', labelsize=12, rotation=45)
# 设置图例字号
ax.legend(fontsize=12)
# 自适应调整坐标轴
fig.tight_layout()
plt.show()
在上述代码中,我们使用 color
参数分别将柱状图的颜色设置为红色和蓝色。使用 fontsize
参数设置字体大小,使用 ax.tick_params()
函数设置横坐标和纵坐标轴刻度的字体大小和旋转角度。我们还可以使用 ax.spines()
函数来设置边框样式。
总结
在本篇文章中,我们通过一个数据集的示例介绍了如何使用 Matplotlib 绘制多组柱状图,并添加样式。Matplotlib 提供了丰富的绘图函数,方便用户快速绘制多种类型的图表,同时还支持样式的设置和可定制性,可在数据可视化方面发挥出其应有的作用。