Colormap для ошибок в диаграмме рассеяния x-y с использованием matplotlib
У меня есть временной ряд данных, для которых у меня есть величина, y и ее ошибка, yerr. Теперь я хотел бы создать график, который показывает y против фазы (то есть время/период% 1) с вертикальными ошибками (yerr). Для этого я обычно использую pyplot.errorbar(time, y, yerr = yerr,...)
Однако, я хотел бы использовать colorbar/map, чтобы указать значение времени в этом же сюжете.
Я делаю так:
pylab.errorbar( phase, y, yerr=err, fmt=None, marker=None, mew=0 )
pylab.scatter( phase, y, c=time, cmap=cm )
К сожалению, это будет отображать одноцветные ошибки (по умолчанию синий). Так как у меня есть ~ 1600 точек за каждый сюжет, это приводит к тому, что цветовая палитра графика рассеяния исчезает за ошибками. Здесь картина показывает, что я имею в виду:
![enter image description here]()
Есть ли способ, по которому я могу получить строки ошибок, которые будут построены с использованием той же самой цветовой схемы, что и в диаграмме рассеяния? Я не хочу вызывать errorbar 1600 раз...
Ответы
Ответ 1
В дополнение к изменению цвета другое предложение состоит в том, чтобы изменить zorder
столбцов ошибок на график рассеяния. Это фокусирует пользователя на данных и выводит общую форму ошибок (что, я думаю, является вашим намерением).
from pylab import *
# Generate some random data that looks like yours
N = 1000
X = random(N)
Y = sin(X*5) + X*random(N)*.8
Z = random(N)
ERR = X*random(N)
# These are the new arguments that I used
scatter_kwargs = {"zorder":100}
error_kwargs = {"lw":.5, "zorder":0}
scatter(X,Y,c=Z,**scatter_kwargs)
errorbar(X,Y,yerr=ERR,fmt=None, marker=None, mew=0,**error_kwargs )
xlim(0,1)
show()
![enter image description here]()
Ответ 2
Я искал какое-то решение, и наконец нашел способ:
from pylab import *
#data
time = arange(100.)
signal = time**2
error = ones(len(time))*1000
figure(1)
#create a scatter plot
sc = scatter(time,signal,s=20,c=time)
#create colorbar according to the scatter plot
clb = colorbar(sc)
#create errorbar plot and return the outputs to a,b,c
a,b,c = errorbar(time,signal,yerr=error,marker='',ls='',zorder=0)
#convert time to a color tuple using the colormap used for scatter
time_color = clb.to_rgba(time)
#adjust the color of c[0], which is a LineCollection, to the colormap
c[0].set_color(time_color)
fig = gcf()
fig.show()
xlabel('time')
ylabel('signal')
Ответ 3
Вы можете использовать необязательный аргумент ecolor
в pylab.errorbar
, поскольку вы используете аргумент color
в pylab.scatter
:
pylab.errorbar( phase, y, yerr=err, fmt=None, marker=None, mew=0, ecolor=time )