首页 > 解决方案 > 使用 python 和 matplotlib 获取打印在条形图顶部的值?

问题描述

我正在尝试使用条形顶部的值打印该图,该值将根据图表自动更改。我正在使用以下代码:

import pandas as pd
import matplotlib.pyplot as plt
hsif = pd.read_excel('C:\\Users\\ans\\Desktop\\test.xlsx')
class_sum = hsif.groupby('Class')['Value'].sum()
class_sum_sort = class_sum.sort_values(ascending=False)
ax = class_sum_sort.plot.barh(x='Class',y=class_sum_sort).invert_yaxis()
plt.title('My Dynamic Graphs')
plt.xlabel('Value',fontsize=20)
plt.ylabel('Class',fontsize=20)
plt.show()

使用包含数据的excel文件为:

+----------+---------+
| Class    |  Value  |
+----------+---------+
|   Six    |  3763   |
|   Six    |  2570   |
|   Six    |  1123   |
|   Six    |  901    |
|   Seven  |  12210  |
|   Seven  |  10384  |
|   Seven  |  3188   |
|   Seven  |  2592   |
|   Seven  |  1723   |
|   Seven  |  1011   |
+----------+---------+

我们可以添加特定于Six橙色和Seven红色的颜色吗?谁可以帮我这个事?

标签: pythonpython-3.xmatplotlib

解决方案


您可以遍历条并设置文本和颜色。

import pandas as pd
import matplotlib.pyplot as plt

hsif = pd.read_excel('C:\\Users\\ans\\Desktop\\test.xlsx')
class_sum = hsif.groupby('Class')['Value'].sum()
class_sum_sort = class_sum.sort_values(ascending=False)
ax = class_sum_sort.plot(kind="barh", fontsize=13)
ax.set_title('My Dynamic Graphs')
ax.set_xlabel('Value', fontsize=20)
ax.set_ylabel('Class', fontsize=20)    

for i in ax.patches:
    ax.text(i.get_width(), i.get_y()+.3, str(i.get_width()), fontsize=13)

ax.patches[0].set_color("red")
ax.patches[1].set_color("orange")

ax.invert_yaxis()
plt.tight_layout()
plt.show()

推荐阅读