可视化cumsum python

时间:2018-08-31 00:46:16

标签: python pandas matplotlib seaborn

这与帖子Rolling Difference using Pandas

有关

现在我在下面有这个数据框,我正在试图形象化。

Item    Add Subtracts   Month   Net_Items   Monthly_Available_Items
C   68  30  1   38  38
C   58  34  2   24  62
C   64  47  3   17  79
C   263 81  4   182 261
C   95  104 5   -9  252
C   38  63  6   -25 227
C   115 95  7   20  247
C   97  112 8   -15 232

代码和图形如下:

plt.figure(figsize=(20,10))
fig, ax1 = plt.subplots(figsize = (20,10))
ax1 = sns.pointplot(x='Month', y='value', hue='variable',data=stack_df)
ax1.legend(loc = 'upper left')
ax2 = sns.barplot(x = 'Month', y = 'Monthly_Available_Items', data = 
stack_df, color = 'purple')
ax1.set_ylabel("Count of Items")

加和减与可用每月库存的比较: Comparison of Add and subtracts vs available monthly inventory

问题:

  1. 如何将图例添加到ax2轴。这代表每个月的每月可用项目。我尝试过

    ax2.legend()但不起作用

  2. 我如何为每个项目(A,B,C,D,E)创建相似的图

1 个答案:

答案 0 :(得分:0)

您可以通过指定label

添加图例
ax2 = sns.barplot(x = 'Month', y = 'Monthly_Available_Items', 
                             data = stack_df, color = 'purple', 
                             label = "Monthly_Available_Items")
ax2.legend() # will show the legend for the barplot

如果要基于“项目”列绘制多个图,则可以使用groupby进行绘制。

假设这是我们的数据帧df:

  Item  Add  Subtracts  Month   Net_Items   Monthly_Available_Items
0   C   68     30        1        38             38
1   D   58     34        2        24             62
2   C   64     47        3        17             79
3   C   263    81        4       182            261
4   D   95    104        5        -9            252
5   D   38     63        6       -25            227
6   D   115    95        7        20            247
7   C   97    112        8       -15            232

Item列为每个唯一值绘制多个图的最简单方法是使用熊猫plot方法。我们将首先使用melt,然后使用groupby

melt = df.melt(id_vars=('Item', 'Month', 'Monthly_Available_Items'), 
               value_vars=['Add','Subtracts'])

# sort the melted df by item column
melt.sort_values("Item", inplace=True)

# using groupby to plot by item column.
ax = df.groupby("Item").plot(x='Month', y = "Monthly_Available_Items",
                        kind='bar', color='purple')

# list of axes generated by ax
axes = [i for i in ax] 

# list of unique items from item column eg.,C,D
items = melt.Item.unique()

for i in range(len(c)):
    sns.pointplot(x='Month', y='value', hue='variable', 
                       data=melt[melt.Item == c[i]], ax=axes[i])

# customize
axes[0].set_title("Plot for Item C")
axes[1].set_title("Plot for Item D")
plt.show()

enter image description here enter image description here