在我的直方图中,我需要像这样注释 X 轴:
python - 如何在 matplotlib 轴上标记一系列值?-LMLPHP

“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 轴上标记一系列值?-LMLPHP

关于python - 如何在 matplotlib 轴上标记一系列值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47914905/

10-10 09:34