堆叠式面积图的原理与简单面积图相同,但它能同时显示多个数据系列,适合用来比较同一间隔内多个变量的变化。缺点则是单个变量的变化不明显。
基于matplotlib
import numpy as np
import matplotlib.pyplot as plt
# 自定义数据
x=range(1,6)
y1=[1,4,6,8,9]
y2=[2,2,7,10,12]
y3=[2,8,5,10,6]
# 利用stackplot绘制堆叠面积图
plt.stackplot(x,y1, y2, y3, labels=['A','B','C'])
plt.legend(loc='upper left')
plt.show()
基于pandas
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 自定义数据
y = [[1,4,6,8,9], [2,2,7,10,12], [2,8,5,10,6]]
df = pd.DataFrame(y).T
df.columns = ['A', 'B', 'C']
# 利用area函数绘制堆叠面积图
df.plot.area()
plt.show()
自定义堆叠面积图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
# 初始化布局
fig = plt.figure(figsize=(12,3))
# 自定义颜色
x = range(1,6)
y = [ [10,4,6,5,3], [12,2,7,10,1], [8,18,5,7,6] ]
plt.subplot(1, 2, 1)
pal = sns.color_palette("Set1")
plt.stackplot(x,y, labels=['A','B','C'], colors=pal, alpha=0.4 )
plt.legend(loc='upper right')
plt.title('自定义颜色')
# 百分比堆积图
data = pd.DataFrame({ 'group_A':[1,4,6,8,9], 'group_B':[2,24,7,10,12], 'group_C':[2,8,5,10,6], }, index=range(1,6))
data_perc = data.divide(data.sum(axis=1), axis=0) # 利用divide转为百分比数据
plt.subplot(1, 2, 2)
plt.stackplot(range(1,6), data_perc["group_A"], data_perc["group_B"], data_perc["group_C"], labels=['A','B','C'])
plt.legend(loc='upper left')
plt.title('百分比堆积图')
plt.show()
以上通过matplotlib和pandas快速绘制堆叠面积图。并通过修改参数或者辅以其他绘图知识自定义各种各样的堆叠面积图来适应相关使用场景。
共勉~