如何注释下图? [复制]

Posted

技术标签:

【中文标题】如何注释下图? [复制]【英文标题】:How do I annotate the following graph? [duplicate] 【发布时间】:2020-01-02 02:40:01 【问题描述】:

我使用 3 个不同的熊猫系列制作了直方图。我想标记条形组 1、2 和 3。我没有成功使用 xlabels 来执行此操作;从技术上讲,它可以工作,但数字 1、2、3 没有与条正确对齐。

我决定跳过它并尝试注释。不幸的是,我知道如何正确地做到这一点。

我尝试使用 xlabels,但没有成功。现在我正在尝试注释,但我无法在图表上显示多个文本。

以下是数据的示例 Wr_Spr_Conv = [1,1,1,2,2,2,3,3,3,2,2,1,2,3...]

new2['Wr_Spr_Conv'].replace(0, pd.np.nan).dropna(inplace = True)
new2['Re_Spr_Conv'].replace(0, pd.np.nan).dropna(inplace = True)
new2['Ma_Spr_Conv'].replace(0, pd.np.nan).dropna(inplace = True)


plt.style.use('seaborn')
x_labels = [1,2,3]
fig, ax1 = plt.subplots(figsize=(10,10))

#ax1.spines['left'].set_position(('outward', 10))
#ax1.spines['bottom'].set_position(('outward', 10))
# Hide the right and top spines

ax1.spines['right'].set_visible(False)
ax1.spines['top'].set_visible(False)
ax1.spines['bottom'].set_visible(False)
ax1.spines['right'].set_visible(False)
nbins = 9
ax1.tick_params(bottom="off", top="off", left="off", right="off")
    ax1.hist([new2['Wr_Spr_Conv'],new2['Re_Spr_Conv'],new2['Ma_Spr_Conv']],nbins)
#ax1.set_xticks(3)
#ax1.set_xticks(3)
#ax1.set_xlim(right =3)
#ax1.set_xlim(left=0)
# Only show ticks on the left and bottom spines
#ax1.yaxis.set_ticks_position('left')
#ax1.xaxis.set_ticks_position('bottom')    
ax1.set_xticks(x_labels)
ax1.set_xlim(right=3)  # adjust the right leaving left unchanged
ax1.set_xlim(left=1)  # adjust the left leaving right unchanged
ax1.xaxis.set_major_locator(MaxNLocator(integer=True))
#ax1.annotate('Level 1',xy=(1,15))

【问题讨论】:

@Heath 不同之处在于,这里的 OP 需要预定义数量的垃圾箱,这不是简单地使用 Wr_Spr_Conv.plot(kind='bar', align='center') 完成的。 @jojo 我认为这个答案应该仍然有效:***.com/a/28931750/5982697 @Heath 如果您可以向我解释在***.com/questions/28931224/… 中设置的箱数(独立于数据点的数量 - 例如使用 3 个箱),那么我也会投票重复。 啊,我明白了,我认为这有点不同(他们将标签放在不同的位置,在轴上与在条形上方)。然而,与明确设置的 bin 计数无关,可以使用相同的方法来设置标签,我认为这是 OP 想要解决的主要问题。像这样的东西:gist.github.com/heathhenley/2237984e43d5e751ce8d9b45d892a812 我确实问了一个类似的问题,但是我删除了该帖子,因为我的问题写得不好。我稍后会尝试发布的答案 【参考方案1】:

假设您的Wr_Spr_Conv 是pandas.Series,您可以使用value_counts 和pyplot 的bar 方法和属性align='center' 创建一个直方图具有预定义数量的箱和居中标签。

这是一个最小的例子:

import pandas as pd
from matplotlib import pyplot as plt

nbr_bins = 9
Wr_Spr_Conv = pd.Series( [1,1,1,2,2,5,9,2,7,7,2,3,3,3,2,2,1,2,3]) 
vc = Wr_Spr_Conv.value_counts(bins=nbr_bins)
plt.bar(vc.index.mid, vc.values, width=0.9*vc.index.length[0], align='center')
plt.gca().set_xticks(vc.index.mid)
plt.show()

结果:

这应该让你开始!

【讨论】:

早上试试这个数据集,非常感谢! @Moo10000 这对你有用吗? 它很接近,现在条形图堆叠在一起,而不是彼此相邻。 ` 'vc1 = new2['Wr_Spr_Conv'].value_counts() vc2= new2['Re_Spr_Conv'].value_counts() vc3 = new2['Ma_Spr_Conv'].value_counts() k=[vc1,vc2,vc3] # plt.bar(vc1.index,vc1.values, align='center') plt.bar(vc2.index, vc2.values, align = 'center') plt.bar(vc3.index, vc3.values, align = 'center') plt.gca().set_xticks(vc1.index) plt.show()' 我认为我不需要 9 个 bin,因为该系列只有 1、2 和 3 个值。我在工作 我尝试了一些我在网上找到的关于分组条形图的帖子vc1 = new2['Wr_Spr_Conv'].value_counts() vc2= new2['Re_Spr_Conv'].value_counts() vc3 = new2['Ma_Spr_Conv'].value_counts() r1 = np.arange(len(vc1)) r2 = [x + .25 for x in r1] r3 = [x + .25 for x in r2] k=[vc1,vc2,vc3] # plt.bar(r1,vc1.values, align='center') plt.bar(r2, vc2.values, align = 'center') plt.bar(r3, vc3.values, align = 'center') plt.gca().set_xticks(vc1.index) plt.show() 第一条评论,一切都排好了,这里的条形都重叠了@jojo 感谢您的帮助,了解了更多关于这个绘图业务的知识

以上是关于如何注释下图? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eclipse 中生成 Javadoc 注释? [复制]

将 XML 文件读入 XmlDocument 时如何忽略注释? [复制]

如何在 Spring Boot 中使用注释配置视图解析器? [复制]

如何注释我的方法以在 Android 中返回 Visibility 类型 int? [复制]

如何使用 PHP 解码带有注释的 JSON 文件? [复制]

如何使用正则表达式过滤掉 c 类型的注释? [复制]