python – 使用pivot_table实现带有覆盖条和条形组的条形图的Pandas

使用Pandas和
Python我试图实现一个条形图.

数据从CSV导入Pandas中的数据框.

有几组条形根据其中一列中的特定行值进行分组,这些列是类别:A,B,C,D,E.
这些类别由CSV中名为category的列中的值给出.从附图可以看出,A对应浅灰色,B对应最硬的蓝色,依此类推.

每个行都有两列(COLUMN1,COLUMN2),它们与条形图中的y值(从1到5,这给出了条的高度)相关.所以看一下附图:从第1列开始构造非半透明条,从COLUMN2构建半透明条.

《python – 使用pivot_table实现带有覆盖条和条形组的条形图的Pandas》

编辑

以下是导入的CSV / dataframe中数据的布局:

Category    COLUMN1         COLUMN2     Month    
A          0.2               3          Jan   
B          0.3               5          Jan 
C          0.7               4          Jan
D          0.4               3          Jan
E          0.8               5          Jan
A          0.3               4          Feb
B          0.75             4.5         Feb

结束编辑

我已经设法使用5条非半透明条形图的分组制作图,但我不知道如何将半透明条形图放入相同的图中,如附图所示.有什么建议?我的问题是我需要将COLUMN2中的值添加为半透明条(它们不必是半透明的,但它可能是最容易区分的).

这是我到目前为止的代码:

import pandas as pd


df=pd.read_csv("filename_for_import.csv", 
               names=["Category", "COLUMN1", "COLUMN2", "Month"], 
encoding="UTF-8")

order = ['Jan', 'Feb', 'Mar', 'Apr']



d = pd.pivot_table(df, index='Month', columns='Category', 
values='COLUMN1').loc[order].plot(kind='bar', grid='True')

编辑2

刚刚根据使用的数据意识到了潜在的问题.将COLUMN1中的A值调整为大于第一行的B,以举例说明.

Category    COLUMN1         COLUMN2     Month    
A          4.5                3         Jan   
B          0.3               5          Jan 
C          0.7               4          Jan
D          0.4               3          Jan
E          0.8               5          Jan
A          0.3               4          Feb
B          0.75             4.5         Feb

发现非半透明条放置在顶部,使得当它们低于非半透明条时,不可能看到半透明条.这似乎改变了Parfait下面提供的代码中的顺序.同样在同一代码中在col / ax 1和2之间切换似乎没有任何区别.无论如何,看起来好像非透明条总是放在上面.有没有办法覆盖这个?

最佳答案 考虑
twiny将较短的COLUMN1图覆盖在较大的COLUMN2枢轴图上.并使用alpha来调整不透明度.至于pivot_table,使用reindex来调整月份值.

from io import StringIO
import pandas as pd
import matplotlib.pyplot as plt

txt = '''Category    COLUMN1         COLUMN2     Month    
A          0.5               3          Jan   
0          0.3               5          Jan 
C          0.7               4          Jan
D          0.4               3          Jan
E          0.8               5          Jan
A          0.3               4          Feb
B          0.75             4.5         Feb'''

df = pd.read_table(StringIO(txt), sep="\s+")

order = ['Jan', 'Feb', 'Mar', 'Apr']

fig, ax = plt.subplots()
ax2 = ax.twiny()

col1 = pd.pivot_table(df,index='Month',columns='Category',values='COLUMN1').reindex(order)
col1.plot(kind='bar', ax=ax)

col2 = pd.pivot_table(df,index='Month',columns='Category',values='COLUMN2').reindex(order)
col2.plot(kind='bar', ax=ax2, alpha=0.5, legend=False)
ax2.xaxis.set_visible(False)

plt.show()  

《python – 使用pivot_table实现带有覆盖条和条形组的条形图的Pandas》

点赞