Цветовая карта для ошибок на графике рассеяния xy с использованием matplotlib

У меня есть временной ряд данных, для которого у меня есть количество, y, и его ошибка, yerr. Теперь я хотел бы создать график, показывающий y против фазы (то есть время / период% 1) с вертикальными полосами ошибок (yerr). Для этого я обычно использую pyplot.errorbar(time, y, yerr=yerr, ...)

Тем не менее, я хотел бы использовать цветную полосу / карту, чтобы указать значение времени на этом же графике.

Таким образом, я делаю следующее:

pylab.errorbar( phase, y, yerr=err, fmt=None, marker=None, mew=0 )
pylab.scatter( phase, y, c=time, cmap=cm )

К сожалению, при этом будут отображаться неокрашенные панели ошибок (по умолчанию синий). Поскольку у меня ~1600 точек на график, цветовая карта графика рассеяния исчезает за полосами ошибок. Вот картинка показывает, что я имею в виду:

Есть ли способ, которым я могу получить графики ошибок, используя ту же цветовую карту, что и диаграмма рассеяния? Я не хочу звонить в панель ошибок 1600 раз...

3 ответа

В дополнение к изменению цвета, другое предложение состоит в том, чтобы изменить 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()

Некоторое время я искал решение, и наконец-то нашел выход:

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')

Извините, что коплю это, но просто столкнулся с чем-то похожим сам, и это было мое решение, основанное на предыдущих ответах.

Это устанавливает маркер, панели ошибок и заглавные буквы в один и тот же цвет в карте цветов:

import matplotlib.pyplot as plt
import numpy as np

#data
time = np.arange(100.)
signal = time**2
error = np.ones(len(time))*1000

#create a scatter plot
sc = plt.scatter(time,signal,s=20,c=time)

#create colorbar according to the scatter plot
clb = plt.colorbar(sc)

#convert time to a color tuple using the colormap used for scatter
time_color = clb.to_rgba(time)

#loop over each data point to plot
for x, y, e, color in zip(time, signal, error, time_color):
    plt.errorbar(x, y, e, lw=1, capsize=3, color=color)

Вы можете использовать ecolor необязательный аргумент в pylab.errorbar как вы используете color аргумент в pylab.scatter:

pylab.errorbar( phase, y, yerr=err, fmt=None, marker=None, mew=0, ecolor=time )
Другие вопросы по тегам