Tôi có một mảng có kích thước trung bình (ví dụ: 1500x3000) mà tôi muốn vẽ theo tỷ lệ vì nó là hình ảnh. Tuy nhiên, các vảy dọc và ngang rất khác nhau. Để đơn giản hóa, hãy nói rằng có một mét/hàng và 10/cột. Cốt truyện sau đó sẽ tạo ra một hình ảnh là c. 1500x30000. Tôi sử dụng mức độ kwarg cho tỷ lệ và khía cạnh = 1 để tránh biến dạng. Hoặc bằng cách sử dụng các cửa sổ vẽ (QT4) và imshow() hoặc bằng cách sử dụng savefig(), tôi không bao giờ thành công trong việc sản xuất hình ảnh ở quy mô và ở độ phân giải đầy đủ.Vẽ ở độ phân giải đầy đủ với matplotlib.pyplot, imshow() và savefig()?
tôi đã xem xét nhiều giải pháp được đề xuất như đã nêu trong here, here, hoặc here và there hoặc there trong trường hợp đó là một lỗi. Tôi đã thay đổi matplotlibrc của tôi và đặt nó trong ~/.config/matplotlib để cố gắng buộc các tùy chọn hiển thị/lưu trữ của tôi nhưng không có kết quả. Tôi cũng đã thử với pcolormesh() nhưng không thành công. Tôi sử dụng python 2,7 và matplotlib 1.3 từ repo của Ubuntu 14.04 và QT4Agg như một phụ trợ. Tôi đã thử TkAgg nhưng nó rất chậm và cho kết quả tương tự. Tôi có ấn tượng rằng trong trục x độ phân giải là đúng nhưng nó chắc chắn bị downsampled theo hướng thẳng đứng. Đây là một đoạn mã nên mô phỏng vấn đề của tôi.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors
R, C = 1500, 3000
DATA = np.random.random((R, C))
DATA[::2, :] *= -1 # make every other line negative
Yi, Xi = 1, 10 # increment
CMP = 'seismic'
ImageFormat ='pdf'
Name = 'Image'
DataRange = (np.absolute(DATA)).max() # I want my data centred on 0
EXTENT = [0, Xi*C, 0 ,Yi*R]
NORM = matplotlib.colors.Normalize(vmin =-DataRange, vmax= DataRange, clip =True)
for i in range(1,4):
Fig=plt.figure(figsize=(45, 10), dpi = 100*i, tight_layout=True)
Fig.suptitle(Name+str(i)+'00DPI')
ax = Fig.add_subplot(1, 1, 1)
Plot = ax.imshow(DATA, cmap=plt.get_cmap(CMP), norm = NORM, extent = EXTENT, aspect = 1, interpolation='none')
ax.set_xlabel('metres')
ax.set_ylabel('metres')
Fig.savefig(Name+str(i)+'00DPI.'+ImageFormat, format = ImageFormat, dpi = Fig.dpi)
plt.close()
Trong imshow(), suy = 'none' hoặc 'gần' hoặc 'bilinear' không thay đổi độ phân giải cho một số lý do mặc dù tôi nghĩ nó là vụ phải ít nhất là trong cửa sổ Qt4 nếu tôi làm chương trình() thay vì savefig(). Lưu ý rằng độ phân giải là giống nhau trong các hình được lưu bất cứ điều gì bạn thiết lập trong plt.figure (dpi =).
Tôi hết ý tưởng và với giới hạn hiểu biết của mình về cách mọi thứ hoạt động với hệ thống này. Bất kỳ trợ giúp là rất hoan nghênh.
Xin cảm ơn trước.
Có lưu dưới dạng tùy chọn SVG không? 'plt.savefig (" test.svg ")' – Eric
Tôi đã không nhận thấy một sự cải thiện tiết kiệm như svg về độ phân giải dọc. – Boorhin
Tôi đã sửa đổi mã để hình ảnh sẽ luân phiên các giá trị dương và âm theo chiều dọc. Ý tưởng chính là nếu các hình ảnh được giải quyết đầy đủ, chúng tôi sẽ có thể phân biệt các sọc ngang màu xanh và đỏ – Boorhin