2015-07-16 17 views
7

Sử dụng matplotlib, tôi muốn viết văn bản trên các ô hiển thị trong ký hiệu khoa học bình thường, ví dụ như 1.92x10 -7 thay vì mặc định 1.92e-7. Tôi đã tìm thấy sự giúp đỡ về cách làm điều này cho các con số ghi nhãn ve trên các trục nhưng không phải cho chức năng văn bản. Dưới đây là ví dụ về mã của tôi mà tôi muốn thay đổi:Hiển thị các số bằng "X" thay vì ký hiệu khoa học "e" trong matplotlib

import numpy as np 
import matplotlib.pyplot as plt 

x = np.linspace(0,0.5) 
y = x*(1.0-x) 

a=1.92e-7 

plt.figure() 
plt.plot(x, y) 
plt.text(0.01, 0.23, r"$a = {0:0.2e}$".format(a), size=20) 
plt.show() 
+1

ý tưởng đầu tiên sẽ là một chức năng lọc, mà biến đổi đầu ra của phương pháp định dạng. Điều này đã đủ rồi, và nếu không, tại sao? Và nếu không: Ký hiệu khoa học nghiêm ngặt sẽ là dấu chấm giữa thay vì chữ "x" ... – guidot

Trả lời

8

Một cách hơi khó hiểu là tạo chuỗi tex của riêng bạn cho số từ biểu diễn chuỗi Python của nó. Vượt qua as_si, định nghĩa dưới đây, số điện thoại và một số chữ số thập phân và nó sẽ tạo ra chuỗi tex này:

import numpy as np 
import matplotlib.pyplot as plt 

x = np.linspace(0,0.5) 
y = x*(1.0-x) 

def as_si(x, ndp): 
    s = '{x:0.{ndp:d}e}'.format(x=x, ndp=ndp) 
    m, e = s.split('e') 
    return r'{m:s}\times 10^{{{e:d}}}'.format(m=m, e=int(e)) 

a=1.92e-7 

plt.figure() 
plt.plot(x, y) 

plt.text(0.01, 0.23, r"$a = {0:s}$".format(as_si(a,2)), size=20) 
plt.show() 

enter image description here

+0

Điều này ít gây hiểu lầm và linh hoạt hơn so với phương pháp mà tôi đưa ra. Tuy nhiên, tôi không hiểu tại sao 3 niềng răng lồng nhau là cần thiết để định dạng số mũ. Tôi cũng không hiểu tại sao định dạng "' định dạng (m = m, e = int (e)) '" và không "' của nó (m, int (e)) '". –

+0

Bạn cần một cặp dấu ngoặc đơn trong đầu ra TeX và một dấu ngoặc đơn đơn được lấy bằng cách tăng gấp đôi ('{{' và '}}') trong một chuỗi có định dạng Python mới; các định danh định dạng có tên (từ khóa) là một cách thay thế để liệt kê chúng trong hàm 'format'. – xnx

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