在Python中让matplotlib的误差条不被剪切

7 投票
2 回答
4534 浏览
提问于 2025-04-15 22:45

我在Python中使用matplotlib来绘制带有误差条的折线图,代码如下:

plt.errorbar(xvalues, up_densities, yerr=ctl_sds, fmt='-^', lw=1.2, markersize=markersize,
         markeredgecolor=up_color, color=up_color, label="My label", clip_on=False)
plt.xticks(xvalues)

我用“xticks”设置了x轴的刻度。但是,最后一个点的误差条(也就是xvalues[-1])在右边被截断了——也就是说,只有一半的误差条能显示出来。即使我设置了clip_on=False选项,这种情况依然存在。我该怎么做才能让误差条完整显示,即使它的右边部分实际上超出了xvalues[-1]的范围呢?

谢谢。

2 个回答

0

这是不是你想表达的意思?你是想重新定义你图表的横向范围吗?

plt.errorbar(range(5), [3,2,4,5,1], yerr=[0.1,0.2,0.3,0.4,0.5])
ax = plt.gca()
ax.set_xlim([-0.5,4.5])

Matplotlib errorbar
(来源: stevetjoa.com)

13

在matplotlib这个库里,想要对图形进行详细的控制,通常需要通过“艺术家”(Artists)来实现。我觉得下面的代码可以满足你的需求:

import matplotlib.pyplot as plt
from random import uniform as r

x = range(10)
e = plt.errorbar(x, [r(2,10) for i in x], [r(.1,1) for i in x], capsize=8, color='r')

for b in e[1]:
    b.set_clip_on(False)

plt.show()

在这里输入图片描述

你遇到的问题是,clip_on这个参数是用来控制标记的,而不是误差条。要控制误差条,plt.errorbar这个函数会返回一个元组,其中第二个元素是一个误差条的列表。所以我会遍历这个列表,把每个误差条的裁剪功能关闭。

撰写回答