繁体   English   中英

如何将条形图标签移动到 Y 轴?

[英]How to move bar chart labels to the Y-axis?

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

在此处输入图像描述

我有相当长的一段代码来重新创建这个 plot,所以只复制它的一部分。 我唯一的想法是通过 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')

为了也显示 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()

示例图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM