Matplotlib绘制堆叠面积图
介绍
堆叠面积图是一种常用的数据可视化方式,通过堆叠不同数据系列的面积,可以直观地展示数据的变化趋势和比例关系。在Python中,matplotlib是一个功能强大的绘图库,可以用来绘制各种类型的图表,包括堆叠面积图。
准备数据
在绘制堆叠面积图之前,首先需要准备数据。我们以一个简单的示例来说明,假设有三个数据系列A、B、C,每个数据系列包含5个数据点。
import matplotlib.pyplot as plt
# 数据
data = {
'A': [20, 35, 30, 35, 27],
'B': [25, 32, 34, 20, 25],
'C': [30, 30, 32, 22, 18]
}
# x轴数据
x = range(1, 6)
绘制堆叠面积图
接下来,我们使用matplotlib来绘制堆叠面积图。首先,我们需要绘制第一个数据系列A,然后在其基础上绘制第二个数据系列B,最后再在前两个数据系列的基础上绘制第三个数据系列C。
import matplotlib.pyplot as plt
# 数据
data = {
'A': [20, 35, 30, 35, 27],
'B': [25, 32, 34, 20, 25],
'C': [30, 30, 32, 22, 18]
}
# x轴数据
x = range(1, 6)
# 绘制堆叠面积图
plt.stackplot(x, data['A'], data['B'], data['C'], labels=['A', 'B', 'C'])
plt.legend(loc='upper left')
plt.show()
代码运行结果:
运行以上代码,我们可以得到一个简单的堆叠面积图,其中三个数据系列A、B、C被堆叠在一起,展示了它们的变化趋势。
自定义堆叠面积图
除了简单的堆叠面积图外,我们还可以对图表进行一些自定义,比如修改颜色、添加标签等。
import matplotlib.pyplot as plt
# 数据
data = {
'A': [20, 35, 30, 35, 27],
'B': [25, 32, 34, 20, 25],
'C': [30, 30, 32, 22, 18]
}
# x轴数据
x = range(1, 6)
# 自定义堆叠面积图
plt.stackplot(x, data['A'], data['B'], data['C'], labels=['A', 'B', 'C'], colors=['r', 'g', 'b'])
plt.legend(loc='upper left')
plt.title('Stacked Area Chart')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.grid(True)
plt.show()
代码运行结果:
通过上面的代码,我们可以得到一个自定义的堆叠面积图,其中数据系列A、B、C分别用红色、绿色、蓝色表示,同时添加了标题、坐标轴标签和网格线。
堆叠面积图的堆叠顺序
在堆叠面积图中,数据系列的堆叠顺序会影响最终的图表效果。默认情况下,数据系列是按照在stackplot()函数中传入的顺序进行堆叠的,我们可以通过调整数据的顺序来改变堆叠顺序。
import matplotlib.pyplot as plt
# 数据
data = {
'A': [20, 35, 30, 35, 27],
'B': [25, 32, 34, 20, 25],
'C': [30, 30, 32, 22, 18]
}
# x轴数据
x = range(1, 6)
# 调整堆叠顺序
plt.stackplot(x, data['C'], data['B'], data['A'], labels=['C', 'B', 'A'])
plt.legend(loc='upper left')
plt.show()
代码运行结果:
在上面的代码中,我们将数据系列C放在最底部,数据系列B放在中间,数据系列A放在顶部,这样就改变了堆叠顺序,得到了不同的堆叠面积图。
堆叠面积图的透明度
堆叠面积图中,每个数据系列的颜色会叠加在一起,为了让图表更加清晰,我们可以设置每个数据系列的透明度。
import matplotlib.pyplot as plt
# 数据
data = {
'A': [20, 35, 30, 35, 27],
'B': [25, 32, 34, 20, 25],
'C': [30, 30, 32, 22, 18]
}
# x轴数据
x = range(1, 6)
# 设置透明度
plt.stackplot(x, data['A'], data['B'], data['C'], labels=['A', 'B', 'C'], alpha=0.5)
plt.legend(loc='upper left')
plt.show()
代码运行结果:
在上面的代码中,我们通过设置alpha参数为0.5,使得每个数据系列的颜色透明度为50%,这样可以更清晰地看到数据的叠加效果。
堆叠面积图的填充样式
除了设置透明度外,我们还可以为堆叠面积图设置不同的填充样式,比如斜线、点线等。
import matplotlib.pyplot as plt
# 数据
data = {
'A': [20, 35, 30, 35, 27],
'B': [25, 32, 34, 20, 25],
'C': [30, 30, 32, 22, 18]
}
# x轴数据
x = range(1, 6)
# 设置填充样式
plt.stackplot(x, data['A'], data['B'], data['C'], labels=['A', 'B', 'C'], hatch='//')
plt.legend(loc='upper left')
plt.show()
代码运行结果:
在上面的代码中,我们通过设置hatch参数为’//’,为堆叠面积图添加了斜线填充样式,使得图表更加丰富多彩。
堆叠面积图的边界线
有时候,我们希望在堆叠面积图中添加边界线,以突出数据系列之间的分隔。
import matplotlib.pyplot as plt
# 数据
data = {
'A': [20, 35, 30, 35, 27],
'B': [25, 32, 34, 20, 25],
'C': [30, 30, 32, 22, 18]
}
# x轴数据
x = range(1, 6)
# 添加边界线
plt.stackplot(x, data['A'], data['B'], data['C'], labels=['A', 'B', 'C'], edgecolor='black')
plt.legend(loc='upper left')
plt.show()
代码运行结果:
在上面的代码中,我们通过设置edgecolor参数为’black’,为堆叠面积图添加了黑色的边界线,使得数据系列之间更加清晰。
堆叠面积图的阴影效果
为了突出数据系列的变化趋势,我们可以为堆叠面积图添加阴影效果。
import matplotlib.pyplot as plt
# 数据
data = {
'A': [20, 35, 30, 35, 27],
'B': [25, 32, 34, 20, 25],
'C': [30, 30, 32, 22, 18]
}
# x轴数据
x = range(1, 6)
# 添加阴影效果
plt.stackplot(x, data['A'], data['B'], data['C'], labels=['A', 'B', 'C'], shadow=True)
plt.legend(loc='upper left')
plt.show()
在上面的代码中,我们通过设置shadow参数为True,为堆叠面积图添加了阴影效果,使得图表更加立体和生动。
堆叠面积图的堆叠方式
在默认情况下,堆叠面积图是垂直堆叠的,即数据系列在y轴方向上堆叠。我们也可以将数据系列水平堆叠,即在x轴方向上堆叠。
import matplotlib.pyplot as plt
# 数据
data = {
'A': [20, 35, 30, 35, 27],
'B': [25, 32, 34, 20, 25],
'C': [30, 30, 32, 22, 18]
}
# x轴数据
x = range(1, 6)
# 水平堆叠
plt.stackplot(x, data['A'], data['B'], data['C'], labels=['A', 'B', 'C'], orientation='horizontal')
plt.legend(loc='upper left')
plt.show()
在上面的代码中,我们通过设置orientation参数为’horizontal’,将数据系列水平堆叠,得到了水平堆叠的堆叠面积图。