我有一个条形图,按国家和类别(有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种颜色,而不是基于每当缺少值时。我该怎么办?
答案 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()