У меня есть массив среднего размера (например, 1500x3000), который я хочу построить в масштабе, поскольку это изображение. Однако вертикальные и горизонтальные шкалы очень разные. Для упрощения предположим, что есть один метр/ряд и 10/столбец. Затем график должен создать изображение, которое является c. 1500x30000. Я использую величину kwarg для шкал и аспект = 1, чтобы избежать деформации. Либо используя окна построения (QT4) и imshow(), либо используя savefig(), мне никогда не удалось создать изображение в масштабе и при полном разрешении.
Я рассмотрел многие предлагаемые решения, указанные в здесь, здесь, или здесь и там или там в случае, если это была ошибка. Я изменил свой matplotlibrc и поместил его в ~/.config/matplotlib, чтобы попробовать форсировать мои параметры display/savefig, но безрезультатно. Я также пробовал с pcolormesh(), но безуспешно. Я использую python 2.7 и matplotlib 1.3 из репо Ubuntu 14.04 и QT4Agg в качестве бэкэнд. Я тоже пробовал TkAgg, но он медленный и дает те же результаты. У меня создалось впечатление, что по оси x разрешение правильное, но оно, безусловно, понижается по вертикали. Вот фрагмент кода, который должен имитировать мою проблему.
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()
В imshow() интерполяция = 'none' или 'ближайшее' или 'bilinear' не изменяет разрешение по какой-либо причине, хотя я думаю, что это должно быть по крайней мере в окне Qt4, если я показываю() вместо savefig().
Обратите внимание, что разрешение одинаково на рисунках, сохраненных в настройках plt.figure(dpi =).
Я не знаю и на пределе своего понимания того, как все работает с этой системой. Любая помощь очень приветствуется.
Спасибо заранее.