我想创建一个matplotlib条形图,该图具有堆叠图的外观,而无需从多索引熊猫数据框中添加。
下面的代码给出了基本行为
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import io
data = io.StringIO('''Fruit,Color,Price
Apple,Red,1.5
Apple,Green,1.0
Pear,Red,2.5
Pear,Green,2.3
Lime,Green,0.5
Lime, Red, 3.0
''')
df_unindexed = pd.read_csv(data)
df_unindexed
df = df_unindexed.set_index(['Fruit', 'Color'])
df.unstack().plot(kind='bar')
plot命令df.unstack().plot(kind='bar')
显示所有紧挨着分组的苹果价格。如果您选择该选项df.unstack().plot(kind='bar',stacked=True)
-它将红色和绿色的价格加在一起并叠加。
我想要的是介于两者之间的绘图-它将每个组显示为单个条形,但是覆盖了值,以便您可以全部看到它们。下图(在powerpoint中完成)显示了我正在寻找的行为->我想要右侧的图像。
如果不计算所有值,然后使用堆叠选项,这可能吗?
在我看来,这似乎是个坏主意,因为这种表示方式会导致多个问题。读者会理解那些不是固定资产吗?如果前杠比后杠高,会发生什么?
无论如何,要完成您想要的操作,我将简单地重复调用plot()
数据的每个子集并使用相同的轴,以使这些条形图相互重叠。在您的示例中,“红色”价格始终较高,因此我必须调整顺序以将其绘制在背面,否则它们将隐藏“绿色”条。
fig,ax = plt.subplots()
my_groups = ['Red','Green']
df_group = df_unindexed.groupby("Color")
for color in my_groups:
temp_df = df_group.get_group(color)
temp_df.plot(kind='bar', ax=ax, x='Fruit', y='Price', color=color, label=color)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句