matplotlib Pandas:绘制图表使用dict和标签的顶部每个酒吧

wfypjpf4  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(100)

我试图从一个dict中绘制一个图形,它工作正常,但我也有一个类似的dict,我打算在每个条形图的顶部写入值。
这适用于绘制图形:

import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['axes.formatter.useoffset'] = False

df = pd.DataFrame([population_dct])
df.sum().sort_values(ascending=False).plot.bar(color='b')
plt.savefig("temp_fig.png")

其中population_dct为:

{'pak': 210, 'afg': 182, 'ban': 94, 'ind': 32, 'aus': 14, 'usa': 345, 'nz': 571, 'col': 47, 'iran': 2}

现在我有另一条法令,叫做counter_dct

{'pak': 1.12134, 'afg': 32.4522, 'ban': 3.44, 'ind': 1.123, 'aus': 4.22, 'usa': 9.44343, 'nz': 57.12121, 'col': 2.447, 'iran': 27.5}

我需要的第二个法令项目,以显示在上面的每个酒吧从以前的图表。
我尝试了:

df = pd.DataFrame([population_dct])
df.sum().sort_values(ascending=False).plot.bar(color='g')
for i, v in enumerate(counter_dct.values()):
     plt.text(v, i, " " + str(v), color='blue', va='center', fontweight='bold')

这有两个问题:

  1. counter_dct.values()错过了值序列
    1.这些值显示在每个图的底部,但对齐效果较差
    也许有更好的方法来实现这一点?
s4chpxco

s4chpxco1#

由于您是以desc的方式绘制图形;
首先需要根据值以降序方式对population_dict进行排序

temp_dct = dict(sorted(population_dct.items(), key=lambda x: x[1], reverse=True))

temp_dct开始,然后从counter_dct获取值

counter = 0 # to start from the x-axis
for key, val in temp_dct.items():
    top_val = counter_dct[key]
    plt.text(x=counter, y=val + 2, s=f"{top_val}", fontdict=dict(fontsize=11))
    counter += 1
plt.xticks(rotation=45, ha='right')

相关问题