如何在rcParams中使用linestyle = None在matplotlib中创建错误栏图?

drs*_*drs 17 python matplotlib

在绘制误差条图时,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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

tac*_*ell 30

这是旧版本中的"错误" matplotlib(并已针对1.4系列进行了修复).问题在于,Axes.errorbar默认值为'-'for fmt,然后传递给plot用于绘制标记和线的调用.因为传入格式字符串plot永远不会查看默认值rcparams.

你也可以传入 fmt = ''

eb = plt.errorbar(x, y, yerr=.1, fmt='', color='b')
Run Code Online (Sandbox Code Playgroud)

这将导致rcParam['lines.linestlye']价值得到尊重.我已提交PR以实现此目的.

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

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

这是一个令人讨厌的设计决定,但改变它将是一个主要的api休息.请在github上打开一个关于此的问题.

错误栏文档.

作为旁注,看起来呼叫签名在2007年最后一次更改,那就是使错误栏不是默认为蓝色.

  • 参数`fmt =''`仍然绘制连接线,因此它不能解决问题. (5认同)
  • `MatplotlibDeprecationWarning`:自 1.4 起不推荐使用 `None` 对象作为 fmt 关键字参数来抑制数据值的绘制;改用字符串`"none"`。 (4认同)
  • @strpeter我有同样的问题,我必须至少指定一些标记,例如`fmt ='.'`,然后线终于消失了,无论如何我需要一个标记. (3认同)

小智 9

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