gpt4 book ai didi

matplotlib - 在 matplotlib 中注释数据范围

转载 作者:行者123 更新时间:2023-12-04 14:46:15 27 4
gpt4 key购买 nike

如何注释我的数据范围?例如,说来自 x = 5 的数据至 x = 10大于某个截止值,我怎么能在图表上指出这一点。如果我手动注释,我只会在范围上方画一个大括号,然后在括号上方写下我的注释。

我见过的最接近的是使用 arrowstyle='<->'connectionstyle='bar' , 使两个箭头指向数据的边缘,并用一条线连接它们的尾部。但这并不完全正确。您为注释输入的文本最终将位于其中一个箭头下方,而不是位于栏上方。

这是我的尝试及其结果:

annotate(' ', xy=(1,.5),  xycoords='data',
xytext=(190, .5), textcoords='data',
arrowprops=dict(arrowstyle="<->",
connectionstyle="bar",
ec="k",
shrinkA=5, shrinkB=5,
)
)

Annotation attempt

我尝试的解决方案的另一个问题是注释括号的方形并没有真正清楚地表明我正在突出显示一个范围(与花括号不同)。但我想这只是在这一点上挑剔。

最佳答案

this answer 中所述,您可以使用 sigmoidal 函数构造大括号。下面是在 x 轴正上方添加大括号的函数。只要图形宽度和高度不变化,它生成的大括号应该看起来相同,无论轴限制如何。

import numpy as np
import matplotlib.pyplot as plt

def draw_brace(ax, xspan, text):
"""Draws an annotated brace on the axes."""
xmin, xmax = xspan
xspan = xmax - xmin
ax_xmin, ax_xmax = ax.get_xlim()
xax_span = ax_xmax - ax_xmin
ymin, ymax = ax.get_ylim()
yspan = ymax - ymin
resolution = int(xspan/xax_span*100)*2+1 # guaranteed uneven
beta = 300./xax_span # the higher this is, the smaller the radius

x = np.linspace(xmin, xmax, resolution)
x_half = x[:resolution//2+1]
y_half_brace = (1/(1.+np.exp(-beta*(x_half-x_half[0])))
+ 1/(1.+np.exp(-beta*(x_half-x_half[-1]))))
y = np.concatenate((y_half_brace, y_half_brace[-2::-1]))
y = ymin + (.05*y - .01)*yspan # adjust vertical position

ax.autoscale(False)
ax.plot(x, y, color='black', lw=1)

ax.text((xmax+xmin)/2., ymin+.07*yspan, text, ha='center', va='bottom')

ax = plt.gca()
ax.plot(range(10))
draw_brace(ax, (0, 8), 'large brace')
draw_brace(ax, (8, 9), 'small brace')
输出:
enter image description here

关于matplotlib - 在 matplotlib 中注释数据范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18386210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com