“0”标签跨越两个刻度之间,因为在直方图中只有0s的单独bin,而轴的其余部分是线性的以指示其他bin的边界。 底层并不重要,但是应该有一些指示器“0”跨越整个箱子。
我到目前为止找到的最接近的解决方案是“自己画画”(How to add group labels for bar charts in matplotlib?)。
我期待的是.axvspan()
等效于轴(因为.axvline()
用于刻度线),就像用于标记.axvspan()
的内容一样。
答案 0 :(得分:6)
轴“没有”.axvspan()
等价物。 “.axvline()
”也不是“for ticks”。并且没有任何意图用于标记.axvspan()
。
让我们回答如何在情节下方产生一些红色括号(paranthesis)的问题。您基本上只需绘制一个支架形式的线条,并根据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()