2016-03-08 24 views
5

Trong iPython hiện tại của tôi, các ô matplotlib đang được hiển thị nội tuyến. Tôi muốn có một cách để hiển thị hình ảnh với kích thước pixel cụ thể, vì tôi thường chỉ làm việc với pixel và tôi không in bất cứ thứ gì.IPython và Inline Matplotlib Hình kích cỡ

màn hình PPI của tôi là 208, vì vậy tôi đã thử chạy những 2 miếng mã:

plt.figure(figsize=(2000/float(208), 1000/float(208)), dpi=208) 
# other code here... 
plt.savefig('my_fig.png', dpi=208) 

Những gì tôi đang bối rối về việc này là: Khi tôi kiểm tra my_fig.png, nó thực chất là 2000 pixel 1000 pixel, đây là những gì tôi muốn. Cũng theo https://stackoverflow.com/a/7912007/582917 cài đặt DPI để hiển thị cho thiết bị hiển thị và hiển thị tệp có các giá trị mặc định khác nhau. Đó là lý do tại sao tôi cũng phải thêm dpi=208 vào hàm plt.savefig.

Tuy nhiên hình ảnh được hiển thị trên sổ tay iPython, trong trình duyệt, nhỏ hơn nhiều. Sử dụng trình duyệt của tôi, nó xấp xỉ 600 x 300 pixel.

Sử dụng cùng một DPI cho cả hai chức năng, tại sao hình ảnh hiển thị nội tuyến trong sổ tay iPython quá nhỏ, trong khi hình ảnh đã lưu của tôi ở độ phân giải chính xác mà tôi muốn?

Lưu ý rằng tôi đang chạy iPython trong VirtualBox (cũng không có đầu), tôi không chắc liệu điều này có thể gây ra bất kỳ sự khác biệt nào không.

Sau một vài thử nghiệm và lỗi, để đóng kích thước chính xác cho hiển thị nội dòng, hình dpi cần là 58. Nhưng ngay cả khi hình ảnh được tạo nội tuyến không khớp chính xác với số pixel được chỉ định của tôi. Nó luôn là + - 10 đến 20 pixel.

+0

làm bạn có cùng độ phân giải màn hình/định nghĩa trên máy ảo? – pltrdy

+0

Máy ảo không có đầu. – CMCDragonkai

Trả lời

0

Điều này có thể do thực tế là %matplotlib inline theo mặc định sẽ vượt qua bbox_inches='tight' đến plt.figure(...). Hãy thử những điều sau đây,

Sau khi gọi %matplotlib inline, làm %config InlineBackend.print_figure_kwargs = {'bbox_inches':None} sau đó tạo ra âm mưu của mình. Ở đây những gì nó đã làm cho tôi:

Trước Before

Sau After

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