Python中带正负值的叠层面积图

Python中带正负值的叠层面积图,python,pandas,matplotlib,stacked-area-chart,Python,Pandas,Matplotlib,Stacked Area Chart,我想做一个堆叠区域图,其中一些组是正的,因此将显示在x轴上方(堆叠),其他组是负的,因此将显示在x轴下方。当我进行stackplot时,它只是添加了实际值,因此中有负值的组不会出现在绘图中,但所有其他区域都向下移动。基本上,我想组合两个面积图,一个用于x轴上方的正组,另一个用于x轴下方的负组。假设您有一个熊猫数据框df,组作为列,那么可以执行以下操作: 导入matplotlib.pyplot作为plt 图,ax=plt.子批次() #将数据帧df拆分为纯负值和纯正值 df_neg,df_pos=

我想做一个堆叠区域图,其中一些组是正的,因此将显示在x轴上方(堆叠),其他组是负的,因此将显示在x轴下方。当我进行stackplot时,它只是添加了实际值,因此中有负值的组不会出现在绘图中,但所有其他区域都向下移动。基本上,我想组合两个面积图,一个用于x轴上方的正组,另一个用于x轴下方的负组。

假设您有一个熊猫数据框
df
,组作为列,那么可以执行以下操作:

导入matplotlib.pyplot作为plt
图,ax=plt.子批次()
#将数据帧df拆分为纯负值和纯正值
df_neg,df_pos=df.clip(上=0),df.clip(下=0)
#正值叠加面积图
df_位置绘图面积(ax=ax,堆叠=True,线宽=0)
#重置颜色周期
ax.set\u prop\u循环(无)
#负值的叠层面积图,在列名前加上“u”,这样它们就不会出现在图例中
df_neg.rename(columns=lambda x:''+x).plot.area(ax=ax,stacked=True,linewidth=0。)
#重新缩放y轴
ax.set_ylim([df_neg.sum(axis=1).min(),df_pos.sum(axis=1).max())

可能不完全是您想要的,但我成功地绘制了一个带有负值和正值的面积图。以下代码适用于Python 3.7/Windows 10/Spyder IDE:

import matplotlib.pyplot as plt

x_axis = [1,2,3,4,5,6,7,8,9,10]
cheap = [-5,-4,-6,-8,-4,-2,-4,-8,-7,-3]
expensive = [3,4,8,7,9,6,4,3,2,3]


fig_size = plt.rcParams["figure.figsize"] #set chart size (longer than taller)
fig_size[0] = 39
fig_size[1] = 10
plt.rcParams["figure.figsize"] = fig_size
plt.rcParams.update({'font.size': 18}) 

plt.stackplot(x_axis, expensive, colors=['r'])
plt.stackplot(x_axis, cheap, colors=['g'])

plt.plot([],[],color='r', label='Above great case', linewidth=5)
plt.plot([],[],color='g', label='Below low case', linewidth=5)
plt.legend()

plt.xlabel('Years')
plt.ylabel('Number of companies')
plt.title('Under/over valuation over time')
plt.show()
您应该看到的图表:

该例程实际上用于绘制包含数千个x轴数据点的图表。我试过在一个条形图之前绘制,它比这个区域版本要花更长的时间。以下是制作的真实图表示例:


我们可以看看您现在的代码吗?我有一种感觉,我可以解决这个问题,但不是从头开始。添加您迄今为止尝试过的代码