27

绘制误差线图时,matplotlib 不遵循 no linestyle 的 rcParams。相反,它绘制了与一条线相连的所有点。这是一个最小的工作示例:

import matplotlib.pyplot as plt

lines = {'linestyle': 'None'}
plt.rc('lines', **lines)

plt.errorbar((0, 1), (1, 0), yerr=(0.1, 0.1), marker='o')

plt.savefig('test.pdf')
plt.delaxes()

在此处输入图像描述

linestyle='None'是调用时显式设置的唯一解决方案pyplot.errorbar()吗?

4

2 回答 2

35

这是旧版本中的“错误” matplotlib(已在 1.4 系列中修复)。问题在于,Axes.errorbar其中有一个默认值'-'for fmt,然后将其传递给plot用于绘制标记和线条的调用。因为格式字符串被传入plotin 从不查看rcparams.

你也可以传入fmt = ''

eb = plt.errorbar(x, y, yerr=.1, fmt='', color='b')

这将导致rcParam['lines.linestlye']价值得到尊重。我已经提交了一个PR来实现这一点。

另一个解决方法是分两步制作错误栏:

l0, = plt.plot(x,y, marker='o', color='b')
eb = plt.errorbar(x, y, yerr=.1, fmt=None, color='b')

这是一个恼人的设计决定,但改变它将是一个重大的 api 中断。请在 github 上打开一个关于此的问题。

错误栏文档

作为旁注,看起来调用签名最后一次更改是在 2007 年,那是为了使错误栏不默认为蓝色。

于 2013-08-28T22:12:05.920 回答
3

使用:fmt=''确实不起作用。需要放一些不是空字符串的东西。正如@strpeter 所提到的,点或任何其他标记都可以。例子: fmt='.' fmt=' ' fmt='o'

于 2021-06-28T09:18:51.097 回答