在同一坐标轴上绘制多个标签

3
考虑一个简单的包含两个不同群体的绘图:

enter image description here

我想在同一左侧y轴上为顶部和底部的两个不同的群体添加两个独立的y标签,而所有类似的问题都是处理位于两个不同轴上的标签(即:一个在左边,一个在右边),这不是我需要的。
如何实现此功能?
import numpy as np
import matplotlib.pyplot as plt

N = 50
a = np.random.uniform(100., 120., N)
b = np.random.uniform(10., 20., N)

plt.scatter(range(N), a)
plt.scatter(range(N), b)
plt.show()

这个问题不是关于像这里描述的在图例中添加标签。


1
你能展示一份手工编辑的草稿,展示你想要的结果看起来是什么样子吗? - jdehesa
你可以在两个标签之间使用非常长的空格 plt.ylabel('Label1 Label2') - JahKnows
“ImportanceOfBeingErnest” 展示的基本上就是我在 @jdehesa 脑海中所想的。” - Gabriel
1个回答

5

您可以在y轴上使用较小的刻度来放置标签。在这里,我们可以取数据的平均值来创建一个较小的刻度。该刻度可以关闭,标签可以填充、旋转和对齐,使其看起来类似于常规的ylabel。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker

N = 50
a = np.random.uniform(100., 120., N)
b = np.random.uniform(10., 20., N)

plt.scatter(range(N), a)
plt.scatter(range(N), b)

ax = plt.gca()
ax.yaxis.set_minor_locator(mticker.FixedLocator((a.mean(), b.mean())))
ax.yaxis.set_minor_formatter(mticker.FixedFormatter(("Label A", "Label B")))
plt.setp(ax.yaxis.get_minorticklabels(), rotation=90, size=15, va="center")
ax.tick_params("y",which="minor",pad=25, left=False)


plt.show()

enter image description here


谢谢IOBE,这正是我所需要的。 - Gabriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接