2013-04-24 37 views
54

Làm cách nào để lưu các ô python ở chất lượng rất cao?lưu hình ảnh trong python với chất lượng rất cao

Tức là, khi tôi tiếp tục phóng to đối tượng được lưu trong tệp pdf, không có làm mờ?

Ngoài ra, chế độ tốt nhất để lưu nó vào là gì?

png, eps? Hoặc một số khác? Tôi không thể làm pdf vì có một số ẩn xảy ra sự lộn xộn đó với việc biên dịch Latexmk.

Trả lời

77

Nếu bạn đang sử dụng matplotlib và cố gắng để có được số liệu tốt trong tài liệu latex, hãy lưu dưới dạng eps. Cụ thể, hãy thử một cái gì đó như thế này sau khi chạy các lệnh để vẽ hình ảnh:

plt.savefig('destination_path.eps', format='eps', dpi=1000) 

Tôi đã phát hiện ra rằng eps file làm việc tốt nhất và các thông số dpi là những gì thực sự làm cho họ nhìn tốt trong một tài liệu.

UPDATE:

Để xác định phương hướng của hình trước khi lưu chỉ cần gọi sau đây trước khi plt.savefig cuộc gọi, nhưng sau khi tạo cốt truyện (giả sử bạn có âm mưu sử dụng một trục với tên ax):

ax.view_init(elev=elevation_angle, azim=azimuthal_angle) 

Trường hợp elevation_angle là số (theo độ) chỉ định góc cực (từ trục z dọc) và azimuthal_angle chỉ định góc phương vị (xung quanh trục z).

Tôi thấy rằng dễ nhất để xác định các giá trị này bằng cách đầu tiên vẽ hình ảnh và sau đó xoay nó và xem giá trị hiện tại của các góc xuất hiện về phía dưới cùng của cửa sổ ngay bên dưới âm mưu thực tế. Hãy nhớ rằng các vị trí x, y, z, xuất hiện theo mặc định, nhưng được thay thế bằng hai góc khi bạn bắt đầu nhấp + kéo + xoay hình ảnh.

+0

@ spencerlon2 gì nếu tôi muốn thay đổi hướng của hình trước khi lưu? – dustin

+0

Xem phản hồi được cập nhật. – spencerlyon2

31

Chỉ cần thêm kết quả của tôi, cũng sử dụng matplotlib.

.eps làm cho văn bản của tôi được in đậm và xóa trong suốt. .svg cho tôi hình ảnh có độ phân giải cao thực sự trông giống như biểu đồ của tôi.

import matplotlib.pyplot as plt 
fig, ax = plt.subplots() 
# Do the plot code 
fig.savefig('myimage.svg', format='svg', dpi=1200) 

Tôi đã sử dụng 1200 dpi vì nhiều tạp chí khoa học yêu cầu hình ảnh ở 1200/600/300 dpi tùy thuộc vào hình ảnh. Chuyển đổi sang dpi và định dạng mong muốn trong GiMP hoặc Inkscape.

EDIT: Rõ ràng dpi không quan trọng vì .svg là đồ họa vector và có "độ phân giải vô hạn".

+0

DPI rất quan trọng khi chúng ta sử dụng 'imshow (..) 'ở đâu đó trên hình. Các bitmap này được rasterised xuống khi chúng được nhúng vào SVG. Với DPI mặc định, kết quả thậm chí còn tồi tệ hơn những gì chúng ta thấy trên màn hình, chắc chắn không phù hợp cho các ấn phẩm. –

0

Được rồi, tôi thấy làm việc trả lời spencerlyon2, tuy nhiên trong trường hợp ai sẽ thấy mình không biết phải làm gì với điều đó một dòng, tôi phải làm điều đó theo cách này:

beingsaved = plt.figure() 

# some scatters 
plt.scatter(X_1_x, X_1_y) 
plt.scatter(X_2_x, X_2_y) 

beingsaved.savefig('destination_path.eps', format='eps', dpi=1000) 
Các vấn đề liên quan