这与帖子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")
加和减与可用每月库存的比较:
问题:
如何将图例添加到ax2轴。这代表每个月的每月可用项目。我尝试过
ax2.legend()但不起作用
我如何为每个项目(A,B,C,D,E)创建相似的图
答案 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()