如何使用rcParams中的linestyle=None绘制matplotlib中的误差条图?

32

当绘制误差条图时,matplotlib未遵循无线条样式的rcParams。相反,它会将所有点用一条线连接起来。这是一个最小工作示例:

当绘制误差条图时,matplotlib未遵循无线条样式的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()

在这里输入图片描述

在调用pyplot.errorbar()时,是否唯一的解决方案是明确设置linestyle='None'


一个令人烦恼的默认 matplotlib。Errorbar 暗示着数据需要被绘制;而数据通常是离散的,不应该用线连接起来。 - Friedrich -- Слава Україні
3个回答

34
这是旧版本的matplotlib中的一个“bug”(已在1.4系列中得到fixed)。问题在于,在Axes.errorbar中,fmt有一个默认值为“-”,然后传递给plot调用,用于绘制标记和线条。由于格式字符串传递到plot中,它从不查看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 上打开一个问题报告。 doc 的错误栏。
另外,看起来调用签名最后一次更改是在 2007 年,那时使误差条不再默认为蓝色。

谢谢,我已经打开了一个问题:https://github.com/matplotlib/matplotlib/issues/2366 - drs
7
MatplotlibDeprecationWarning: 使用None对象作为fmt关键字参数来禁止绘制数据值的功能已自1.4版本开始被弃用;请改用字符串"none"代替。 - strpeter
24
参数fmt=''仍然绘制连接线,因此它并没有解决问题。 - strpeter
9
我有同样的问题,最后我必须至少指定一些标记,如 fmt='.',然后那条线就终于消失了,而且我无论如何都需要一个标记。 - mxmlnkn
是的,我知道,但如果我理解正确的话,它应该可以在没有任何其他参数的情况下正常工作。有时候额外的标记只会让人感到困惑。 - strpeter
这个方法没有起作用,所以我还不得不使用一个标记。我使用了 fmt=',',因为 fmt='.' 仍然在误差线后面可见。 - Sahil M

9
使用fmt=''确实无效。需要输入一个非空字符串。 如@strpeter所提到的,一个点或任何其他标记都可以工作。 示例:fmt='.'fmt=' 'fmt='o'

2

或者使用空的线条样式:

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

这在我的matplotlib 3.3.3版本中有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接