【问题标题】:Showing two Y-axis Labels in Horizantal Chart Bars在水平图表条中显示两个 Y 轴标签
【发布时间】:2021-01-30 23:18:26
【问题描述】:

我要做的是在我的水平条形图上放置两个 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()

提前感谢您的帮助...

【问题讨论】:

    标签: matplotlib bar-chart axis-labels


    【解决方案1】:

    您可以将带有换行符的字符串组合成一个字符串,并将它们用作标签:

    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')
    

    【讨论】:

    • @JohanC 谢谢你的回答 :) 这解决了两个 Y 轴标签问题,但是我如何将这些 Y 轴标签添加到条形图中?(不是值)或者我应该问的是有可能吗?你有什么想法吗?
    • 亲爱的@JohanC 我们可以为 y 轴标签分配不同的大小吗?城市名称不是斜体,而是可以使用较小的城市名称吗?
    猜你喜欢
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2017-09-19
    • 2012-03-30
    • 2015-02-24
    • 1970-01-01
    相关资源
    最近更新 更多