Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫使用pivot_表实现带重叠条和条组的条形图_Python_Pandas_Plot - Fatal编程技术网

Python 熊猫使用pivot_表实现带重叠条和条组的条形图

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

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

数据从CSV导入到Pandas中的数据帧中

有几组条形图,它们根据其中一列中的特定行值进行分组,这些列是类别:a、B、C、D、E。 这些类别由CSV中名为“类别”的列中的值给出。正如我们从附图中看到的,A对应浅灰色,B对应浅蓝色,依此类推直到E

每行有两列(第1列、第2列)与条形图中的y值(从1到5,这表示条形图的高度)相关。因此,请看附图:从第1列开始,非半透明条被构造,从第2列开始,半透明条被构造

编辑

以下是导入的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条非半透明条的分组进行了绘图,但我不知道如何将半透明条放入如所附图片所示的相同绘图中。有什么建议吗?我的问题是,我需要将第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和COLUMN1ax时,在覆盖中看不到任何变化的原因是,无论实心图的渲染顺序如何,其渲染强度始终高于透明图。不使用
alpha
而是通过不同的纯色(使用
plot
中的color arg list)进行测试,然后切换
ax