Python 熊猫使用pivot_表实现带重叠条和条组的条形图
使用Pandas和Python,我试图实现一个条形图 数据从CSV导入到Pandas中的数据帧中 有几组条形图,它们根据其中一列中的特定行值进行分组,这些列是类别:a、B、C、D、E。 这些类别由CSV中名为“类别”的列中的值给出。正如我们从附图中看到的,A对应浅灰色,B对应浅蓝色,依此类推直到E 每行有两列(第1列、第2列)与条形图中的y值(从1到5,这表示条形图的高度)相关。因此,请看附图:从第1列开始,非半透明条被构造,从第2列开始,半透明条被构造 编辑 以下是导入的CSV/dataframe中的数据布局:Python 熊猫使用pivot_表实现带重叠条和条组的条形图,python,pandas,plot,Python,Pandas,Plot,使用Pandas和Python,我试图实现一个条形图 数据从CSV导入到Pandas中的数据帧中 有几组条形图,它们根据其中一列中的特定行值进行分组,这些列是类别:a、B、C、D、E。 这些类别由CSV中名为“类别”的列中的值给出。正如我们从附图中看到的,A对应浅灰色,B对应浅蓝色,依此类推直到E 每行有两列(第1列、第2列)与条形图中的y值(从1到5,这表示条形图的高度)相关。因此,请看附图:从第1列开始,非半透明条被构造,从第2列开始,半透明条被构造 编辑 以下是导入的CSV/datafr
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条非半透明条的分组进行了绘图,但我不知道如何将半透明条放入如所附图片所示的相同绘图中。有什么建议吗?我的问题是,我需要将第2列中的值添加为半透明条(它们不必是半透明的,但这可能是Being能够区分的最简单的方法)
这是我目前掌握的代码:
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
刚刚意识到一个潜在的问题,这取决于所使用的数据。将第1列中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之间切换似乎没有任何区别。看起来,无论发生什么情况,不透明条始终位于顶部。有什么方法可以替代这个吗?考虑将较短的COLUMN1绘图覆盖在较大的COLUMN2 pivot绘图上。并使用alpha调整不透明性。对于pivot_表,使用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()
没有人拥有您的文件。模拟一些模拟其结构的数据。下面是一个最近的例子,很好地演示了如何做到这一点。这非常有效,但是我注意到了一个细节。如果半透明条的高度低于相应的非半透明条,则半透明条完全看不见。这让我假设半透明条首先放在背景中,非半透明条放在顶部。如何将其反转,使半透明条显示在顶部?不能在条之间混合不透明性,只能在整个绘图之间混合不透明性。不能让一个类别A与同一绘图中的其他类别的透明度相反,这取决于数据。您可能需要重新排序数据,使纯色始终为较低的值。甚至可以为过滤的情况运行两个不同的图形:COLUMN1>COLUMN2和COLUMN1
ax
时,在覆盖中看不到任何变化的原因是,无论实心图的渲染顺序如何,其渲染强度始终高于透明图。不使用alpha
而是通过不同的纯色(使用plot
中的color arg list)进行测试,然后切换ax
。