问题描述
我想要做的是在我的水平条形图中放置两个 y 标签。Y 轴标签应该是这样的,
西班牙
马德里(首先是国名,在国名下,放置城市名称)
我想显示放置在条形图中的 y 轴标签。我写了下面的代码,但我无法在 y 轴上同时使用国家和城市名称。
import matplotlib.pyplot as plt
fig,ax = plt.subplots()
city=["Madrid","Toronto","New York","Berlin"]
country=["Spain","Canada","USA","Germany"]
values=[10500,9000,8500,7000]
plot = ax.barh(city,values)
plt.yticks(city,fontsize=15)
plt.show()
在此先感谢您的帮助...
解决方法
您可以将带有换行符的字符串组合成一个字符串,并将它们用作标签:
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",7000]
labels = [f'{country_i}\n${city_i}$' for country_i,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(),color='yellow',va='center')
ax.text(0.03,'\n' + city_i,fontsize=11,va='center')