您可以将带有换行符的字符串组合成一个字符串,并将它们用作标签:
import matplotlib.pyplot as plt
city = ["Madrid", "Toronto", "New York", "Berlin"]
country = ["Spain", "Canada", "USA", "Germany"]
values = [10500, 9000, 8500, 7000]
labels = [country_i + '\n' + city_i for country_i, city_i in zip(country, city)]
fig, ax = plt.subplots()
ax.barh(labels, values)
ax.tick_params(axis='y', labelsize=15)
plt.tight_layout()
plt.show()
要将标签放在绘图中,可以将对齐方式更改为'left' 并添加一些填充,这样文本就不会与 y 轴重叠。可以删除刻度线,将其长度设置为0。 (下面的代码在城市名称周围使用美元符号,这将通过 Latex 呈现它们,斜体作为副作用。)
import matplotlib.pyplot as plt
city = ["Madrid", "Toronto", "New York", "Berlin"]
country = ["Spain", "Canada", "USA", "Germany"]
values = [10500, 9000, 8500, 7000]
labels = [f'{country_i}\n${city_i}$' for country_i, city_i in zip(country, city)]
fig, ax = plt.subplots()
ax.barh(labels, values)
ax.set_yticklabels(labels, ha='left', fontsize=15, color='yellow')
ax.tick_params(axis='y', pad=-10, length=0)
plt.tight_layout()
plt.show()
为了更好地控制使用多种文本大小(和颜色),而不是使用标签,可以手动放置文本。换行符可用于设置与 y 轴缩放无关的间距。 "blended transform" ax.get_yaxis_transform() 使用“轴坐标”作为文本的 x 坐标,使用“数据坐标”作为其 y 坐标。
fig, ax = plt.subplots()
ax.barh(range(len(values)), values)
ax.set_yticks([]) # remove default y ticks
for i, (country_i, city_i) in enumerate(zip(country, city)):
ax.text(0.02, i, country_i + '\n', transform=ax.get_yaxis_transform(),
fontsize=15, color='yellow', ha='left', va='center')
ax.text(0.03, i, '\n' + city_i, transform=ax.get_yaxis_transform(),
fontsize=11, color='yellow', ha='left', va='center')