2016-07-26 2 views
0

В следующем фрагменте кодамасштабирования изображения, генерируемые imshow

import matplotlib.pyplot as plt 
import numpy as np 

arr1 = np.arange(100).reshape((10,10)) 
arr2 = np.arange(25).reshape((5,5)) 

fig, (ax1, ax2,) = plt.subplots(nrows=2, figsize=(3,5)) 
ax1.imshow(arr1, interpolation="none") 
ax2.imshow(arr2, interpolation="none") 

plt.tight_layout() 
plt.show() 

производит два изображения с того же размера, но гораздо меньшую «плотность пикселей» во втором.

enter image description here

Я хотел бы иметь второе изображение графический в том же масштабе (т.е. плотности пикселей) первый, без заполнения подфигуров, возможно, правильно выровнены (т.е. происхождение образа в том же подзаговоре положение, как и первый.)

Редактировать

формы arr1 и arr2 являются лишь примером, чтобы показать проблему. То, что я ищу, - это способ обеспечить, чтобы два разных изображения, генерируемые imshow в разных частях рисунка, были сделаны в точно таком же масштабе.

+0

насчет просто интерполирования ваши 2d-матрицы перед построением графика? Должно быть много методов в scipy или scikit-изображении. Последнее должно быть проще в использовании из-за готовых к использованию операций [resize] (http://scikit-image.org/docs/dev/api/skimage.transform.html#skimage.transform.resize). – sascha

+0

@sascha Мне нужно, чтобы второй график (с меньшим количеством пикселей) был меньше первого, так что масштабы xy обеих картин равны. BTW Я рисую данные, а не изображения, поэтому важно, чтобы отдельные «пиксели» оставались видимыми с их приблизительными координатами. Также приемлемо решение, основанное на 'pcolormesh'. –

ответ

1

Простейшая вещь, о которой я мог думать, не сработала, но gridspec. Происхождение здесь не выровнено явно, оно просто использует то, как gridspec заполняет строки (и в качестве разделителя используется неиспользованный подзаговор).

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib import gridspec 

sizes = (10, 5) 
arr1 = np.arange(sizes[0]*sizes[0]).reshape((sizes[0],sizes[0])) 
arr2 = np.arange(sizes[1]*sizes[1]).reshape((sizes[1],sizes[1])) 


# Maybe sharex, sharey? No, we pad one and lose data in the other 
#fig, (ax1, ax2,) = plt.subplots(nrows=2, figsize=(3,5), sharex=True, sharey=True) 
fig = plt.figure(figsize=(3,5)) 

# wspace so the unused lower-right subplot doesn't squeeze lower-left 
gs = gridspec.GridSpec(2, 2, height_ratios = [sizes[0], sizes[1]], wspace = 0.0) 

ax1 = plt.subplot(gs[0,:]) 
ax2 = plt.subplot(gs[1,0]) 


ax1.imshow(arr1, interpolation="none") 
ax2.imshow(arr2, interpolation="none") 

plt.tight_layout() 
plt.show() 

enter image description here

+0

Решение в порядке, после редактирования. Извините, но я пропустил ваше редактирование, мой комментарий относится к первому решению, и я удалю его. –

Смежные вопросы