【问题标题】:How to move bar chart labels to the Y-axis?如何将条形图标签移动到 Y 轴?
【发布时间】:2020-08-26 04:37:46
【问题描述】:

我希望将条形标签标记在 Y 轴上,而不是条形图的顶部。 有没有办法做到这一点?

我有一段很长的代码来重新创建这个情节,所以只复制它的一部分。我唯一的想法是通过 ax.patches 一个一个来做..

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(12345)

df = pd.DataFrame([np.random.normal(32000,200000,3650), 
                   np.random.normal(43000,100000,3650), 
                   np.random.normal(43500,140000,3650), 
                   np.random.normal(48000,70000,3650)], 
                  index=[1992,1993,1994,1995])
df
....
bar_plot = plt.bar(df.index, df.mean(axis=1),yerr=upper, edgecolor='indigo', color=color)  
for i in ax.patches:

    ax.text(i.get_x()+0.2, i.get_height()-5.8, \
            str(round((i.get_height()), 1)), fontsize=14, color='darkblue')

【问题讨论】:

    标签: python matplotlib bar-chart


    【解决方案1】:

    要同时显示 y 轴上的高度,可以在这些位置引入较小的 y 刻度。可选地,可以在那里绘制网格线。

    为了不干扰主要 y 刻度标签的次要 y 刻度标签,一种可能性是使刻度更大,从而将刻度向左移动。

    其他可能性是完全删除主要刻度 (plt.yticks([])),或在右侧绘制任一刻度。

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.ticker import FixedLocator, FormatStrFormatter
    
    np.random.seed(12345)
    
    df = pd.DataFrame([np.random.normal(32000, 200000, 3650),
                       np.random.normal(43000, 100000, 3650),
                       np.random.normal(43500, 140000, 3650),
                       np.random.normal(48000, 70000, 3650)],
                      index=[1992, 1993, 1994, 1995])
    means = df.mean(axis=1)
    bar_plot = plt.bar(df.index, means, edgecolor='indigo',
                       color=[plt.cm.inferno(i / df.shape[0]) for i in range(df.shape[0])])
    plt.xticks(df.index)
    ax = plt.gca()
    ax.yaxis.set_minor_locator(FixedLocator(means))
    ax.yaxis.set_minor_formatter(FormatStrFormatter("%.2f"))
    ax.tick_params(axis='y', which='minor', length=40, color='r', labelcolor='r', labelleft=True)
    plt.grid(axis='y', which='minor', color='r', ls='--')
    plt.tight_layout()
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 2019-05-22
      • 1970-01-01
      相关资源
      最近更新 更多