首页 > 解决方案 > 可视化 cumsum python

问题描述

这与使用熊猫的后期滚动差异有关

现在我在下面有了这个数据框,我正在尝试将其可视化。

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")

加减与可用月度库存的比较: 加减与可用月度库存的比较

问题:

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

    ax2.legend() 但它不起作用

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

标签: pythonpandasmatplotlibseaborn

解决方案


您可以通过指定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

如果您想根据 Item 列绘制多个图,您可以使用它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是使用 pandasplot方法。我们将首先使用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()

在此处输入图像描述 在此处输入图像描述


推荐阅读