调整条形图上的颜色编码,以便在matplotlib中正确地对所有值进行颜色编码

时间:2018-03-05 17:55:43

标签: python python-3.x matplotlib plot bar-chart

我有一个条形图,按国家和类别(有5个类别)绘制比率,但问题是有些国家的类别多于其他国家。

import pandas as pd
import matplotlib.pyplot as plt


df = pd.DataFrame({"state" : ["AL","AL","AL","AK", ],
                   "status" : ["Booked", "Rejected","Cancelled","Rejected"],
                   "0" : [1.5,2.5,3.5,1.0]})

df2 = df.groupby(['state','status']).size()/df.groupby(['state']).size()

fig, ax = plt.subplots()
plt.xlabel('State')
plt.ylabel('Bookings')

my_colors = 'gyr'
df2.plot(kind='bar', color=my_colors, orientation='vertical')

plt.tight_layout()
plt.show()

这对我需要做的大部分工作做得很好但是,会发生的是因为有些国家没有status的所有值,因此没有出现在情节中,它会使一些颜色编码不正确,因为颜色只是移动以重复每5种颜色,而不是基于每当缺少值时。我该怎么办?

1 个答案:

答案 0 :(得分:2)

可能您希望以分组方式显示数据,即每组有3个类别,以便每个类别都有自己的颜色。

在这种情况下,似乎可以通过取消堆叠多索引数据框轻松实现,

df2.unstack().plot(...)

完整示例:

import pandas as pd
import matplotlib.pyplot as plt


df = pd.DataFrame({"state" : ["AL","AL","AL","AK", ],
                   "status" : ["Booked", "Rejected","Cancelled","Rejected"],
                   "0" : [1.5,2.5,3.5,1.0]})

df2 = df.groupby(['state','status']).size()/df.groupby(['state']).size()

fig, ax = plt.subplots()
plt.xlabel('State')
plt.ylabel('Bookings')

my_colors = 'gyr'
df2.unstack().plot(kind='bar', color=my_colors, orientation='vertical', ax=ax)

plt.tight_layout()
plt.show()

enter image description here