Pandas数据框的绘图数据,颜色取决于列值

2024-06-26 14:31:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试了多种代码,将条形图颜色设置为特定值。颜色函数似乎只检查索引中的第一项(在本例中为德国),并为索引中的所有其他项设置条件。如果有人能帮助我,我将不胜感激:

colors = ['red' if 'Germany' else 'lightgrey' for x in first5_countries.index] #it colors all bars red
colors = ['r' if 'IT' else 'b' for index in first5_countries.index] #it colors everything red
colors = ['r' if pop_mln>85 else 'b' for pop_mln in first5_countries.pop_mln] #all bars blue
colors = ['r' if index=='Italy' else 'b' for index in first5_countries.index] #all bars blue
colors = ['b', 'b', 'b', 'r', 'b'] #yields blue

整个代码:

sorted_df = population_2019.sort_values(by='pop_mln', ascending=False)
first5_countries = sorted_df[:5]
colors = ['r' if index=='Italy' else 'b' for index in first5_countries.index]
first5_countries[['pop_mln']].plot.bar(figsize=(20,5), legend=False, color=colors)
plt.ylabel('Total population (in million)', size=12)
plt.xticks(rotation=30, ha='right')
plt.xlabel('')
plt.grid(axis='y')
plt.show()

前5个国家/地区的打印输出:

    geo sex age year    total_pop   pop_mln
geo_full                        
Germany DE  T   TOTAL   2019    83019213.0  83.019213
France  FR  T   TOTAL   2019    67012883.0  67.012883
United Kingdom  UK  T   TOTAL   2019    66647112.0  66.647112
Italy   IT  T   TOTAL   2019    60359546.0  60.359546
Spain   ES  T   TOTAL   2019    46937060.0  46.937060

population

first5_countries.index.values

数组([“德国”、“法国”、“英国”、“意大利”、“西班牙”], 数据类型=对象)


Tags: inforindexifpltredallpop
1条回答
网友
1楼 · 发布于 2024-06-26 14:31:41

您可以这样定义colors

colors = ['red' if x=='Italy' else 'lightgray' for x in first5_countries.index]

然后传递到绘图功能:

first5_countries['population_mln'].plot.bar(figsize=(20,5),color=colors, legend=False)

你们一起做:

colors = ['red' if x=='Italy' else 'lightgray' for x in first5_countries.index]

first5_countries['pop_mln'].plot.bar(figsize=(20,5),color=colors, legend=False)

输出如下:

enter image description here

相关问题 更多 >