Маркер полоски ошибок оттенков без линии штриховки ошибок штриховки - PullRequest
4 голосов
/ 31 марта 2019

Я пытаюсь закрасить маркер графика ошибок, не затеняя линии ошибок.

Вот 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 Ответ

1 голос
/ 31 марта 2019

Второе поведение (markeredgewidth управление capsize) для меня странно.Я думаю, потому что строки маркера и errorcap являются экземплярами объекта 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

Ссылка: Я не могу взять полностьюкредит для второго ответа, он дополнен принятым ответом на этот ТАК вопрос.

Редактировать:

Словарь other_marker_params может выглядеть примерно так:

other_marker_params = {'marker':'.', 
                       'linestyle':' ', 
                       'ecolor':'black', 
                       'elinewidth':0.5}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...