2017-04-04 15 views
5

Tôi vừa mới nâng cấp lên matplotlib 2.0 và nói chung, tôi rất hài lòng với các giá trị mặc định mới. Một điều mà tôi muốn hoàn nguyên về hành vi 1.5 là của plt.colorbar, cụ thể là yticks. Trong matplotlib cũ, chỉ có ve lớn được vẽ trên các thanh màu của tôi; trong matplotlib mới, ve nhỏ và lớn được rút ra, mà tôi không muốn.Trong matplotlib 2.0, làm cách nào để hoàn nguyên hành vi colorbar thành matplotlib 1.5?

Dưới đây được hiển thị so sánh hành vi 1.5 (trái) và hành vi 2.0 (bên phải) sử dụng cùng một dấu thập phân và dấu logarit.

A comparison of colorbar yticks

Tôi cần những gì để mặc định đặt trong matplotlibrc để trở lại 1,5 hành vi hiển thị bên trái? Nếu không có cách nào để làm điều này bằng cách sử dụng matplotlibrc, những con đường nào khác có sẵn để thay đổi này trên toàn cầu vượt quá xuống cấp để matplotlib 1,5?

Tôi đã thử chỉ cần đặt cbar.ax.minorticks_off() sau mỗi phiên bản cbar = plt.colorbar(mesh), nhưng điều đó không giải quyết được vấn đề.

Trả lời

5

Cần đủ để chỉ đặt thanh màu locator thành LogLocator từ mô-đun matplotlib.ticker và sau đó gọi update_ticks() trên thể hiện colorbar.

Ví dụ, hãy xem xét ví dụ tối thiểu này mà tạo ra colorbar bạn đang nhìn thấy với ve nhỏ:

import matplotlib.pyplot as plt 
import matplotlib.ticker as ticker 
import matplotlib.colors as colors 
import numpy as np 

fig, ax = plt.subplots(1) 

# Some random data in your range 1e-26 to 1e-19 
data = 10**(-26. + 7. * np.random.rand(10, 10)) 

p = ax.imshow(data, norm=colors.LogNorm(vmin=1e-26, vmax=1e-19)) 

cb = fig.colorbar(p, ax=ax) 

plt.show() 

enter image description here

Nếu bây giờ chúng ta thêm hai dòng sau đây trước khi gọi plt.show(), chúng tôi loại bỏ trẻ vị thành niên ticks:

cb.locator = ticker.LogLocator() 
cb.update_ticks() 

enter image description here

Ngoài ra, để đạt được điều tương tự, bạn có thể sử dụng ticks kwarg khi tạo colorbar, và thiết lập đó đến LogLocator()

cb = fig.colorbar(p, ax=ax, ticks=ticker.LogLocator()) 
+0

Cảm ơn bạn đã trả lời này! Trong khi điều này dường như làm việc trên từng trường hợp, và tôi sẽ chấp nhận nó như là một câu trả lời trong một hoặc hai ngày nếu không ai có cái nào tốt hơn, nó yêu cầu thêm kwarg mỗi lần tôi vẽ một thanh màu là logarit. Tôi vẫn hy vọng (có lẽ là ngu xuẩn) rằng có một sửa chữa toàn cầu cho vấn đề này có nghĩa là tôi chỉ có thể gọi một hàm duy nhất và có một thanh màu tốt bất kể dữ liệu của tôi có logarit hay không. –

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