2013-02-05 27 views
58

Tôi đang sử dụng Matplotlib trong Python để vẽ các tập dữ liệu đơn giản x-y. Điều này tạo ra đồ thị đẹp, mặc dù khi tôi "phóng to" quá gần trên các phần khác nhau của đồ thị vẽ bằng cách sử dụng dạng xem hình (xuất hiện khi bạn thực thi plt.show()), giá trị trục x thay đổi từ dạng số chuẩn (1050, 1060 , 1070, vv) vào biểu mẫu khoa học với ký hiệu mũ (ví dụ 1, 1,5, 2.0 với nhãn trục x được đưa ra là +1.057e3).Làm thế nào để ngăn chặn các số được thay đổi thành dạng số mũ trong hình matplotlib của Python

Tôi muốn con số của mình giữ lại số đánh số đơn giản của trục hơn là sử dụng biểu mẫu số mũ. Có cách nào tôi có thể buộc Matplotlib làm điều này?

+1

bản sao của http://stackoverflow.com/questions/11855363/how- to-remove-relative-shift-in-matplotlib-axis/11858063 # 11858063 – tacaswell

Trả lời

81

Định dạng nhãn đánh dấu được kiểm soát bởi đối tượng Formatter, giả định rằng bạn chưa thực hiện bất kỳ điều gì lạ mắt sẽ là ScalerFormatterby default. Trình định dạng này sẽ sử dụng một sự thay đổi liên tục nếu thay đổi phân số của các giá trị có thể nhìn thấy là rất nhỏ. Để tránh điều này, bạn chỉ cần tắt nó đi:

plt.plot(arange(0,100,10) + 1000, arange(0,100,10)) 
ax = plt.gca() 
ax.get_xaxis().get_major_formatter().set_useOffset(False) 
plt.draw() 

Nếu bạn muốn tránh ký hiệu khoa học nói chung,

ax.get_xaxis().get_major_formatter().set_scientific(False) 

thể kiểm soát này với toàn cầu thông qua axes.formatter.useoffset rcparam.

+1

Cảm ơn, hoạt động. Xin lỗi cho câu hỏi trùng lặp - tôi đã tìm kiếm trước khi đăng, nhưng tìm kiếm của tôi bao gồm các cụm từ như "ký hiệu khoa học" và "dạng số mũ" thay vì "thay đổi trục tương đối", là những gì người dùng trước đã sử dụng. – IanRoberts

+0

@IanRoberts không phải lo lắng – tacaswell

+1

Có cách nào để buộc vĩnh viễn thay đổi này không? Tôi chưa bao giờ tìm thấy các trục ký hiệu khoa học và luôn luôn tắt chúng đi. Tôi không thể nhìn thấy một rcParam cho điều này mặc dù. – IanRoberts

13

Bạn có thể sử dụng một cái gì đó như:

from matplotlib.ticker import ScalarFormatter, FormatStrFormatter 

ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f')) 
9

Bạn có thể sử dụng một lệnh đơn giản để tắt nó đi:

plt.ticklabel_format(useOffset=False) 
+0

Cảm ơn bạn, giải pháp đơn giản nhất. – arie64

+0

Hoàn thành công việc đơn giản! Cảm ơn. – Whir

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