我有以下绘图,显示线性关系(黑色)及其残差(蓝色)。红色虚线显示残差的上下边界,垂直红色线显示范围:
这是我对残差的边界进行编码的方式:
plt.hlines(y = max(model.resid), xmin = min(x), xmax = max(x),
color = 'r', linestyle = 'dotted')
plt.hlines(y = min(model.resid), xmin = min(x), xmax = max(x),
color = 'r', linestyle = 'dotted')
plt.vlines(label = 'Range of residuals: %g'%(max(model.resid) - min(model.resid)),
x = min(x), ymin = min(model.resid), ymax = max(model.resid),
color = 'r', linestyle = 'solid')
我希望垂直线是双箭头,所以我尝试在arrowprops = {'arrowstyle': '<->'}
之后使用linestyle
,但得到AttributeError: Unknown property arrowprops
。
我发现的所有问题和示例都显示了如何制作任意位置的箭头,但是没有一个箭头比例合理。
有没有简单的方法可以将线转换为双向箭头?
答案 0 :(得分:0)
这是解决您问题的最小解决方案。此处的主要关键字是arrowstyle="<->"
。我个人更喜欢单独使用plt.text
来使文本独立于绘图中的箭头终点。它给您更多自由。由于您缺少数据,我不得不生成随机数据,但我保持x
和y
的范围与您的相似。您可以相应地修改代码。您的问题是您正在将arrowprops
的属性annotate
分配给vlines
。
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8, 5))
ax = fig.add_subplot(111)
x = np.linspace(-0.4, 0.6, 1000)
y = np.random.normal(0, 0.033, 1000)
plt.plot(x, y, 'o')
plt.hlines(y = max(y), xmin = min(x), xmax = max(x),
color = 'r', linestyle = 'dotted')
plt.hlines(y = min(y), xmin = min(x), xmax = max(x),
color = 'r', linestyle = 'dotted')
ax.annotate("",
xy=(min(x), min(y)), xycoords='data',
xytext=(min(x), max(y)), textcoords='data',
arrowprops=dict(arrowstyle="<->",
connectionstyle="arc3", color='r', lw=2),
)
plt.text(1.2*min(x), max(y), 'Range of residuals: %g'%(max(y) - min(y)),
rotation = 90, fontsize = 16)
plt.xlim(1.3*min(x), 1.3*max(x))
输出