在我的直方图中,我需要像这样注释 X 轴:
“0”标签跨越两个刻度之间,因为直方图中只有一个单独的 0 分箱,而轴的其余部分是线性的,以指示其他分箱的边界。
underbrace 并不重要,但应该有一些指示符“0”跨越整个 bin。
到目前为止,我找到的最接近的解决方案是“自己绘制”( How to add group labels for bar charts in matplotlib? )。
我正在寻找与轴等效的 .axvspan()
(因为 .axvline()
用于刻度),就像用于标记 .axvspan()
的东西。
最佳答案
没有“轴的 .axvspan()
等效项”。此外,“.axvline()
”不是“用于滴答声”。而且也没有任何用于标记 .axvspan()
的内容。
因此,让我们回答如何在图下方生成一些红色括号(括号)的问题。您基本上可以以括号的形式绘制一条线,并根据 xaxis 变换对其进行定位。下面是一个函数来做到这一点。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
ax.bar(range(-1,5),range(3,9), width=1, align="edge", ec="k", alpha=1)
ax.set_xticks(range(1,6))
def bracket(ax, pos=[0,0], scalex=1, scaley=1, text="",textkw = {}, linekw = {}):
x = np.array([0, 0.05, 0.45,0.5])
y = np.array([0,-0.01,-0.01,-0.02])
x = np.concatenate((x,x+0.5))
y = np.concatenate((y,y[::-1]))
ax.plot(x*scalex+pos[0], y*scaley+pos[1], clip_on=False,
transform=ax.get_xaxis_transform(), **linekw)
ax.text(pos[0]+0.5*scalex, (y.min()-0.01)*scaley+pos[1], text,
transform=ax.get_xaxis_transform(),
ha="center", va="top", **textkw)
bracket(ax, text="0", pos=[-1,-0.01], linekw=dict(color="crimson", lw=2) )
plt.show()
关于python - 如何在 matplotlib 轴上标记一系列值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47914905/