2013-08-23 39 views
9

Cho đến gần đây tôi đã sử dụng Mathematica cho các ô của tôi. Mặc dù nó là một nỗi đau thực sự và tất cả mọi thứ phải được thực hiện bằng tay, kết quả mà rất gần với những gì tôi muốn. Một ví dụ là như sau:Matplotlib thanh màu nền và vị trí nhãn

Mathematica example plot

Tôi thực sự thích các hình chữ nhật tròn màu xám trong nền của colorbar. Trong khi tất cả mọi thứ đã được điều chỉnh bằng tay trong Mathematica, matplotlib tự động hơn nhiều và đã tạo ra kết quả tốt đẹp.

Mathematica example plot

Tuy nhiên vẫn còn hai vấn đề tôi có:

  1. Tôi không biết làm thế nào để làm một hình chữ nhật tròn ở chế độ nền. Tôi nhìn vào bản vá fancybbox nhưng không làm cho nó hoạt động với thanh màu như tôi muốn. Cách tốt nhất để có được một cái gì đó như hộp Mathematica là gì? Đối với các huyền thoại trong âm mưu có vẻ là một lựa chọn ưa thích bbox ... nhưng không cho colorbars
  2. Khi tôi sử dụng "dấu hiệu nhỏ hơn" (<) nhãn của thanh màu di chuyển quá xa sang phải. Làm thế nào tôi có thể điều chỉnh này (thậm chí có thể "ở giữa" những con số như trong âm mưu Mathematica)?

Tôi rất mong nhận được bất kỳ đề xuất nào chỉ đúng hướng :).

+0

http://stackoverflow.com/questions/15882249/matplotlib-aligning-y-ticks-to-the-left/15883858#15883858 <- làm thế nào để điều chỉnh đệm trên nhãn đánh dấu – tacaswell

+1

Và vui lòng hiển thị mã cho chúng tôi. – tacaswell

Trả lời

17

Đối với câu hỏi thứ hai của bạn: bạn có thể sử dụng một giá trị âm labelpad để di chuyển các nhãn trở lại về phía ticklabels, như thế này:

import numpy as np 
import matplotlib.pyplot as plt 

data = np.linspace(0, 10, num=256).reshape(16,16) 

cf = plt.contourf(data, levels=(0, 2.5, 5, 7.5, 10)) 
cb = plt.colorbar(cf) 

cb.set_ticklabels([r'$<10^{0}$', 1, 2, r'$10^{14}$', r'$10^{14}+12345678$']) 
cb.set_label(r'$n_e$ in $m^{-3}$', labelpad=-40, y=0.45) 

plt.show() 

Sử dụng tham số y, bạn bổ sung có thể di chuyển nhãn hướng lên hoặc xuống cho đối xứng tốt hơn.

Đối số của labelpad được tính theo điểm (1/72 inch). y chấp nhận các giá trị trong [0, 1], 0.0 là đường viền dưới và 1.0 phía trên.

Kết quả:

Script Output

+1

'y' không bị giới hạn trong khoảng thời gian' [0.0, 1.0] '. Nó có thể lấy bất kỳ float/số nguyên nào. Nếu 'y> 1.0' nhãn sẽ được đặt _above_ trên cùng của trục, và nếu' y <0,0' nó sẽ được đặt _below_ dưới cùng của trục. Các tọa độ trục được _normalized_, có nghĩa là '0.0' là" bắt đầu "và' 1.0' mức "cuối" của trục. – hooy

+0

Chỉ cần rõ ràng: '[0, 1]' là ký hiệu _interval_, không phải là ký hiệu danh sách. Do đó, điều này có nghĩa là từ '0' đến' 1'. Điều này áp dụng cho cả câu trả lời và nhận xét ở trên. – hooy

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