我已经在 python 中的 matplotlib 中创建了一个图表,但是以下代码中的最后一行不允许在图表之外对齐条形标签。
import matplotlib.pyplot as plt
g=df.plot.barh(x=name,y=days)
g.set_title("Days people showed up")
g.bar_label(g.containers[0], label_type='edge')
我得到一个看起来像这样的图表:
Days people showed up
-----------------------
Amy |+++ 1 |
Bob |+++++++++++++++ 4 |
Jane |+++++++ 2 |
---|---|---|---|---|---
1 2 3 4 5
相反,我想要一些东西像这样:
Days people showed up
----------------------- Count
Amy |+++ | 1
Bob |+++++++++++++++ | 4
Jane |+++++++ | 2
---|---|---|---|---|---
1 2 3 4 5
可以这样做吗?它似乎不是 matplotlib 中原生的,因为 label_type 的唯一选项是边缘或中心。是否也可以在条形标签上添加标签?
当然可以!虽然 matplotlib 没有直接在条形图的右侧添加标签的选项,但我们可以通过一些自定义实现。
以下是实现目标的方法:
import matplotlib.pyplot as plt
# 你的数据(假设与你的代码段相同)
name = ['Amy', 'Bob', 'Jane']
days = [1, 4, 2]
fig, ax = plt.subplots()
bars = ax.barh(name, days)
# 设置标题
ax.set_title("Days people showed up")
# 在条形图的右侧添加标签
ax.bar_label(bars, padding=5)
# 添加标签标题
ax.text(1.02, 0.95, 'Count', transform=ax.transAxes, ha='left', va='center')
# 调整布局以容纳标签
plt.tight_layout()
plt.show()
说明:
-
ax.bar_label(bars, padding=5)
: 此函数用于为条形图添加标签。我们使用padding
参数在条形图和标签之间添加一些间距。 -
ax.text(1.02, 0.95, 'Count', ...)
: 此函数用于添加标签标题。-
1.02
和0.95
是相对于坐标轴的坐标,将标签放置在右侧。 -
transform=ax.transAxes
确保坐标相对于坐标轴而不是数据。 -
ha='left'
和va='center'
分别将标签水平和垂直对齐。
-
-
plt.tight_layout()
: 此函数用于自动调整子图参数,以便所有元素都适合图形区域,包括标签。
此代码将生成一个水平条形图,其中条形图标签位于右侧,并且在标签上方有一个“Count”标签。
标签:python,pandas,matplotlib From: 78786324