如何在matplotlib轴上标记值范围?

abu*_*kaj 3 python visualization matplotlib axis-labels

在我的直方图中,我需要像这样注释X轴: 在此输入图像描述

"0"标签跨越两个刻度之间,因为在直方图中仅有0的单独bin,而轴的其余部分是线性的以指示其他bin的边界.underbrace并不重要,但是应该有一些指示器"0"跨越整个bin.

到目前为止我找到的最接近的解决方案是"自己绘制"(如何在matplotlib中为条形图添加组标签?).我正在寻找.axvspan()相当于轴(.axvline()对于刻度线),就像用于标记的东西一样.axvspan().

Imp*_*est 6

没有" .axvspan()轴的等价物".还" .axvline()"是不是"蜱".并且也没有用于标记的东西.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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述