2012-04-18 41 views
13

Tôi có chuỗi thời gian dữ liệu mà tôi có số lượng, y và lỗi của nó, yerr. Bây giờ tôi muốn tạo một âm mưu cho thấy y chống lại pha (tức là thời gian/khoảng thời gian% 1) với các thanh lỗi dọc (yerr). Đối với điều này, tôi thường sử dụng pyplot.errorbar (time, y, yerr = yerr, ...)Colormap cho các thanh lỗi trong ô phân tán x-y bằng cách sử dụng matplotlib

Tuy nhiên, tôi muốn sử dụng thanh màu/bản đồ để cho biết giá trị của thời gian trong cùng một ô này.

gì vì vậy tôi làm là như sau:

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

Thật không may, điều này sẽ vẽ errorbars unicolored (mặc định là màu xanh). Vì tôi có ~ 1600 điểm cho mỗi ô, điều này làm cho bản đồ màu của âm mưu phân tán biến mất sau các thanh lỗi. Dưới đây là một bức tranh cho thấy những gì tôi có nghĩa là:

enter image description here

Có cách nào mà tôi có thể nhận được các thanh lỗi để được vẽ bằng cách sử dụng bản đồ màu tương tự như được sử dụng trong biểu đồ phân tán? Tôi không muốn gọi errorbar 1600 lần ...

Trả lời

0

Bạn có thể sử dụng đối số tùy chọn ecolor trong pylab.errorbar khi bạn sử dụng các color luận trong pylab.scatter:

pylab.errorbar(phase, y, yerr=err, fmt=None, marker=None, mew=0, ecolor=time) 
+0

@ Hooked, tôi nghĩ ngẫu nhiên muốn/errorbars của mình để có cùng màu như/datapoints của mình. Giải pháp của bạn là tốt vì nó đặt các thanh thông báo bên dưới các bảng dữ liệu và cải thiện độ rõ ràng của biểu đồ, nhưng nó không khắc phục được vấn đề về màu sắc của thanh lỗi. –

+0

@ Moi Jaiunvelo: Tôi đã thử điều này và nó không làm việc cho tôi, thật không may. Bạn có thể vui lòng giải thích làm thế nào để có được mảng thời gian (loại float và chạy thường từ [0, 2000.]) đến một mảng ecolor hợp lệ? – Random

14

Ngoài việc thay đổi màu sắc, khác đề xuất là thay đổi zorder của các thanh lỗi so với lô phân tán. Điều này tập trung người dùng vào dữ liệu và rút ra hình dạng chung của các lỗi (mà tôi nghĩ là ý định của bạn).

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

+0

Xin cảm ơn! Tôi không biết về kwarg zorder. Mặc dù đây không phải là câu trả lời chính xác mà tôi đã hy vọng, nó sẽ làm cho thời điểm này. MoiJaiunvelo đã đúng, lý tưởng tôi muốn có các thanh thông báo được vẽ cùng màu với các đường dữ liệu. – Random

7

tôi đang tìm kiếm các giải pháp cho một thời gian và cuối cùng tôi tìm thấy một cách thức thông qua:

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

Giải pháp tuyệt vời, nhưng làm thế nào về màu sắc của mũ? Có cách nào để cập nhật màu của mũ bằng cách sử dụng bản đồ màu không? – aim

Các vấn đề liên quan