2013-06-19 5 views
36

Tôi muốn làm cho màu của các điểm trên ô phân tán tương ứng với giá trị của phân số rỗng, nhưng trên thang loga để khuếch đại sự khác biệt. Tôi đã làm điều này, nhưng bây giờ khi tôi làm plt.colorbar(), nó hiển thị nhật ký của phần void, khi tôi thực sự muốn phần void thực tế. Làm thế nào tôi có thể tạo một thang đo log trên thanh màu với các nhãn thích hợp của phân số void, thuộc về [0.00001,1]?Một thanh màu logarit trong ô phân tán matplotlib

Đây là hình ảnh của ô mà tôi có bây giờ, nhưng thanh màu tỷ lệ trống không được gắn nhãn phù hợp với phần trống thực sự, thay vì nhật ký của nó.

current plot

fig = plt.figure() 
plt.scatter(x,y,edgecolors='none',s=marker_size,c=np.log(void_fraction)) 
plt.colorbar() 
plt.title('Colorbar: void fraction') 

Nhờ sự giúp đỡ của bạn.

Trả lời

50

Hiện nay là một phần của tài liệu mô tả how color mapping and normalization works (có nghĩa là một liên kết đến tài liệu phát triển, nhưng áp dụng cho tất cả các phiên bản của mpl. Nó sẽ nằm trong tài liệu hướng dẫn đường chính 'sớm')

Cách mà matplotlib ánh xạ màu là hai bước, trước tiên là chức năng Normalize (được bao bọc bởi các lớp con của matplotlib.colors.Normalize) ánh xạ dữ liệu mà bạn đưa vào [0, 1]. Bước thứ hai ánh xạ các giá trị trong [0,1] -> không gian RGBA.

Bạn chỉ cần sử dụng lớp chuẩn hóa LogNorm, được chuyển vào với số norm kwarg.

plt.scatter(x,y,edgecolors='none',s=marker_size,c=void_fraction, 
       norm=matplotlib.colors.LogNorm()) 

Khi bạn muốn chia tỷ lệ/tinh chỉnh dữ liệu cho âm mưu, tốt hơn là hãy để biến đổi hơn là tự làm điều đó.

  • Normalizedoc
  • LogNormdoc
  • matplotlib.colordoc
+0

Perfect, cảm ơn bạn! – Cokes

+5

Kết quả là trong Hình 2. http://pubs.rsc.org/en/content/articlehtml/2014/cp/c3cp55039g Tôi đã thêm Stack Overflow vào các xác nhận! – Cokes

+0

Cảm ơn bạn! NẾU chỉ các tài liệu ám chỉ nơi để tìm. Có tất cả các chức năng tuyệt vời với các thông số tuyệt vời cung cấp khả năng tuyệt vời nhưng không có gì về cách sử dụng chúng. – EndsOfInvention