没有阴影误差线的阴影误差线标记

时间:2019-03-31 09:57:30

标签: python matplotlib

我正在尝试使误差线图的标记变暗,而不使误差线成阴影。

这是MWE:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
y = [1, 2, 3, 4]
dx = 0.1
dy = 0.1

plt.errorbar(x, y, xerr = dx, yerr = dy, marker = '.', 
             linestyle = ' ', color = 'black', capsize = 2,
             elinewidth = 0.5, capthick = 0.4, alpha = 0.8)

plt.savefig('MWE.pdf')
plt.show()

此外,如何在不更改上限的情况下摆脱标记边缘?如果我放markeredgewidth = 0,则capsize会重置。

更新的代码

import matplotlib.pyplot as plt
import matplotlib

x = [1, 2, 3, 4]
y = [1, 2, 3, 4]
dx = 0.1
dy = 0.1

other_marker_params = {'marker':'.',
                       'linestyle':' ',
                       'alpha':0.8,
                       'capthick':0.5,
                       'capsize':20,
                       'ecolor':'black',
                       'elinewidth':0.5}

(_, caps, _) = plt.errorbar(x, y, xerr=dx, yerr=dy, markerfacecolor = 'black',
                            markeredgewidth = 0, **other_marker_params)

for cap in caps:
    cap.set_markeredgewidth(1)
    cap.set_markersize(2)

plt.savefig('MWE.pdf')
plt.show()

1 个答案:

答案 0 :(得分:1)

第二种行为(markeredgewidth控制着capsize)对我来说很奇怪。我的猜测是因为标记线和错误线线都是Line2D对象的实例,它们都被传递了您设置的markeredgewidth参数。

要回答您的问题:

  • 可以使用kwarg markerfacecolor控制标记的颜色,如下所示:

    plt.errorbar(x, y, xerr=dx, yerr=dy, 
                 markerfacecolor='red',
                 **other_marker_params) # a dict specifying kwargs in
    
  • 另一个问题可以通过手动编辑用于上限线和误差线的Line2D实例来解决,这些实例由plt.errorbar函数返回:

    (_, caps, elines) = plt.errorbar(x, y, xerr=dx, yerr=dy, 
                                markerfacecolor='red', 
                                markeredgewidth=0,
                                **other_marker_params)
    
    for cap in caps:
        cap.set_markeredgewidth(1)
        cap.set_markersize(2)
        cap.set_alpha(1)
    for eline in elines:
        eline.set_alpha(1)
    

使用它,我可以得到这样的图像:

example_marker_control

参考:我不能完全相信第二个答案,它是从this这样的问题的公认答案中修改的。

编辑:

字典other_marker_params可能类似于:

other_marker_params = {'marker':'.', 
                       'linestyle':' ', 
                       'ecolor':'black', 
                       'elinewidth':0.5}