2017-09-08 17 views
5

Tôi đang vẽ nhiều hình của cùng một biến trên một ô sử dụng thư viện matplotlib. Tôi không tìm kiếm một số colorbar cho các ô con, là tài liệu tìm kiếm chi phối. Tôi lô nhiều scatter s, nhưng colorbar chỉ được đặt thành giá trị của phân đoạn cuối cùng tôi vẽ.Một thanh màu cho nhiều ô phân tán

Đây là một phần của mã:

plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s') 
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o') 
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^') 
plt.colorbar().set_label('Wind speed',rotation=270) 
+0

Các bạn đã thử gọi 'plt.colorbar(). Set_label ('Gió tốc độ', luân chuyển = 270) 'sau mỗi lần '.scatter'? –

+0

Có, nhưng có thêm ba thanh màu, đó không phải là những gì tôi đang tìm kiếm. Tôi cần một thanh màu bao gồm tất cả các phạm vi trong các ô phân tán được vẽ. –

Trả lời

2

Nó đòi hỏi một chút công việc phụ:

  • Bạn có để có được tối thiểu và tối đa của c s (các giá trị colorbar)
  • Bạn phải clim mỗi ô phân tán

Fi RST tối thiểu và tối đa:

zs = np.concatenate([z1, z2, z3], axis=0) 
min_, max_ = zs.min(), zs.max() 

Sau đó các điểm phân tán với clim:

plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s') 
plt.clim(min_, max_) 
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o') 
plt.clim(min_, max_) 
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^') 
plt.clim(min_, max_) 
plt.colorbar().set_label('Wind speed',rotation=270) 

Đối với một tập dữ liệu rất đơn giản:

x1, x2, x3 = [1,2,3], [2,3,4], [3,4,5] 
y1 = y2 = y3 = [1, 2, 3] 
z1, z2, z3 = [1,2,3], [4,5,6], [7,8,9] 

enter image description here

+1

Oh cảm ơn bạn. Đó là một cách gọn gàng để làm điều đó. –

0

scatter có một cuộc tranh luận norm . Sử dụng cùng một norm cho tất cả các phân tán đảm bảo rằng thanh màu được tạo bởi bất kỳ ô nào (do đó cũng là ô cuối cùng) giống nhau cho tất cả các ô phân tán.

norm có thể là một trường hợp Normalize, giá trị tối thiểu và tối đa nào được đặt và tạo ra một tỷ lệ tuyến tính ở giữa. Tất nhiên bạn cũng có thể sử dụng bất kỳ tiêu chuẩn khác được cung cấp trong matplotlib.colors như PowerNorm, LogNorm vv

mini, maxi = 0, 2 # or use different method to determine the minimum and maximum to use 
norm = plt.Normalize(mini, maxi) 
plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s', norm=norm) 
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o', norm=norm) 
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^', norm=norm) 
plt.colorbar().set_label('Wind speed',rotation=270) 
Các vấn đề liên quan