2010-05-15 2 views
5

Я использую Matplotlib в Python, чтобы построить линию с errorbars следующим образом:решений errorbars не обрезается в Matplotlib с Python

plt.errorbar(xvalues, up_densities, yerr=ctl_sds, fmt='-^', lw=1.2, markersize=markersize, 
     markeredgecolor=up_color, color=up_color, label="My label", clip_on=False) 
plt.xticks(xvalues) 

я поставил галочки на оси х, используя «xticks». Тем не менее, полосы ошибок последней точки в значениях x (например, xvalues ​​[-1]) обрезаются справа - это означает, что отображается только половина строки ошибок. Это справедливо даже с параметром clip_on = False. Как я могу исправить это, чтобы строки ошибок отображались полностью, даже если их правая сторона технически вне xvalues ​​[-1]?

спасибо.

ответ

10

В Matplotlib, большинство детализированного контроля должно быть сделано через художников. Я думаю, что это должен делать то, что вы хотите:

import matplotlib.pyplot as plt 
from random import uniform as r 

x = range(10) 
e = plt.errorbar(x, [r(2,10) for i in x], [r(.1,1) for i in x], capsize=8, color='r') 

for b in e[1]: 
    b.set_clip_on(False) 

plt.show() 

enter image description here

Проблема вы имели в том, что ключевое слово clip_on использовался для управления маркерами и не Столбики ошибок. Чтобы управлять ошибками, plt.errorbar возвращает кортеж, где второй элемент представляет собой список ошибок. Поэтому здесь я просматриваю список и выключаю отсечение для каждого окна ошибок.

+0

Очень приятно. Я на самом деле пробовал то же самое, но ничего не видел, потому что я неправильно перерисовывал. –

+3

Обратите внимание, что это работает только для шапок. Если полоса вырезается пополам (как вы увидите, когда вы выключаете оси), вам нужно сделать то же самое для всех b в e [2]. – Peter

+0

@Peter: Хорошая точка. Благодарю. – tom10

1

Это вы имеете в виду? Вы хотите переопределить горизонтальные пределы вашего сюжета?

plt.errorbar(range(5), [3,2,4,5,1], yerr=[0.1,0.2,0.3,0.4,0.5]) 
ax = plt.gca() 
ax.set_xlim([-0.5,4.5]) 

Matplotlib errorbar http://up.stevetjoa.com/errorbar.png

+0

Нет, я хочу, чтобы последний галочка был в 4 (в вашем примере) и горизонтальная ось X, чтобы закончиться тем, что ничего не прошло. Горизонтальные линии на концах баров ошибок будут слегка проходить через конец оси x, но clip_on = False должны делать видимыми тем не менее ... хотя они этого не делают. Любые идеи, как я могу это сделать? – user248237dfsf

Смежные вопросы