我有这个dataframe:
df = pd.DataFrame({
'year': [2022,2022,2022,2022,2022,2023,2023],
'source': ['youtube', 'youtube', 'facebook', 'facebook', 'facebook', 'google', 'google'],
'score': [10,20,100,200,300,90,70],
'rating': ['small', 'large', 'small', 'medium', 'large', 'medium', 'large']})
我试图为每个不同的源值创建一个堆叠条形图-因此将有3个图,源列中的每个值一个。
我试图通过df.plot
中的颜色Map参数为条形图设置颜色-但不是所有的值都显示出来,例如youtube for 2022没有medium的值,因此颜色Map导致错误。
这是我的颜色Map:
color_map = {'small': 'yellow', 'medium': 'green', 'large':'blue'}
我怎样才能确保在绘制图时没有错误,并且它能很好地处理丢失的情况?
我的plot代码如下:
for company in df['source'].unique():
# filter to make plot of company only
temp_df = df[df.source == company]
temp_df = temp_df.pivot_table(index=temp_df.year, columns=['source', 'rating'], values='score', aggfunc='sum')
color_map = {'small': 'yellow', 'medium': 'green', 'large':'blue'}
fig, ax = plt.subplots(1,1)
ax = temp_df.plot.bar(stacked=True, figsize=(10, 6), ylabel='scores', xlabel='dates', title='Scores', ax = ax,color = color_map)
1条答案
按热度按时间1cosmwyk1#
在透视DataFrame之后,用零填充任何缺失值。这确保了在原始DataFrame中不存在的年份、来源和评级的任何组合在透视DataFrame中将具有零值。正如您所指出的,某些来源可能没有所有评级。因此,我们将
color_map
子集化,以仅包括temp_df
中存在的评级的颜色。