2011-12-09 26 views
9

Tôi muốn in nhãn trục: "Nhiệt độ (℃)". Tôi phải làm nó như thế nào? Một đoạn là thế này:Làm cách nào để in biểu tượng Celsius bằng matplotlib?

# -*- coding: utf-8 -*- 
import matplotlib.pyplot as plt 
x = range(10,60,1) 
y = range(-100, 0, 2) 
fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot(x,y) 
ax.set_xlabel('Temperature (℃)') 

Cho rằng dòng cuối cùng tôi đã cố gắng:

ax.set_xlabel('Temperature (℃)'.encode('utf-8')) 

ax.set_xlabel(u'Temperature (u\2103)') 

ax.set_xlabel(u'Temperature (℃)') 

ax.set_xlabel(u'Temperature (\u2103)') 

ax.set_xlabel('Temperature (\u2103)') 

Tôi chỉ không nhận được nó. Tôi đang sử dụng spyder và chạy mã từ đó.

+1

Mã của bạn có hoạt động nếu chạy từ tập lệnh bên ngoài trình thám thính không? – unutbu

+0

Ahh, tôi đã cố gắng mà ra ban đầu, nhưng có kết quả tương tự như chạy nó từ spyder (phải có được một công thức không chính xác anyway). Tôi nên thử lại với một vài người khác mà tôi đã liệt kê ở trên. –

Trả lời

18

Sử dụng thông dịch các LaTeX để làm cho biểu tượng độ.

ax.set_xlabel('Temperature ($^\circ$C)') 

Dưới đây là kết quả:

enter image description here

+3

Tôi nghĩ đây là giải pháp tốt nhất cho tôi. Nó cũng có lợi thế là làm cho nhãn hình của tôi phù hợp với văn bản của tôi (tôi sử dụng LaTeX để sắp chữ). Thay vì $^\ circ $ C, tôi đã sử dụng \ textcelsius. –

6
ax.set_xlabel(u'Temperature (℃)') 

nên làm việc:

enter image description here

In [56]: matplotlib.__version__ 
Out[56]: '1.0.1' 
+0

nếu OP đang sử dụng phiên bản cũ của ipython, nó có thể không hoạt động - có một số lỗi unicode – wim

+0

oh, xin lỗi, anh ta đang sử dụng spyder – wim

+0

Dường như spyder không hỗ trợ utf-8. Tôi thậm chí không thể nhập các ký tự utf-8 bằng cách sử dụng phương thức soạn thảo "Ctrl + Shift + U". Trình soạn thảo của spyder chỉ bỏ qua nó và đi vào 'U'. Tôi đã sao chép biểu tượng celsius từ ứng dụng bản đồ ký tự của gnome. –

6

Thay vì độ C U + 2103 (℃), sử dụng SIGN DEGREE U + 00B0 (°) tiếp theo là chữ cái viết hoa. Điều này an toàn hơn nhiều vì nhiều lý do, bao gồm cả phạm vi phông chữ. Nó cũng là cách được khuyến nghị trong các Unicode Standard (15.2 Ký tự giống chữ; trang 481).

1

Hoặc:

ax.set_xlabel(u'Temperature (\N{DEGREE SIGN}C)') 

Nếu bạn muốn làm cho nó tương thích với TeX phi TeX, sau đó người ta có thể phải sử dụng cả hai cách và thử nghiệm với if rcParams['text.usetex'] trước tay. Đây là how it's done in basemap chẳng hạn.

0

Cập nhật cho người dùng Spyder:

$^\ circ $ - works!

\ N {DEGREE SIGN} - mang lại cho tôi những biểu tượng gamma chữ thường ...

3

Để làm công việc này trong matplotlib mà không cần người phiên dịch LaTex, sử dụng unicode định dạng các chuỗi ký tự unicode

from numpy import arange, cos, pi 
from matplotlib.pyplot import (figure, axes, plot, xlabel, ylabel, title, 
           grid, show) 
figure(1, figsize=(6,4)) 
ax = axes([0.1, 0.1, 0.8, 0.7]) 
t = arange(0.0, 1.0 + 0.01, 0.01) 
s = 3*cos(2*pi*t)+25 
plot(t, s) 

title('Average High Temperature') 
xlabel('Year') 
ylabel(u'Temp (\u00B0C)') 
grid(True) 
show() 

enter image description here

+0

Điều này có vẻ là IMO tốt nhất; vòng tròn LaTeX $ \ circ $ là quá nhỏ. –

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