Pytanie Drukowanie obrazów obok siebie za pomocą matplotlib


Zastanawiałem się, jak mogę rysować obrazy obok siebie matplotlib na przykład coś takiego:

enter image description here

Najbliższe, jakie mam, to:

enter image description here

Zostało to wykonane przy użyciu tego kodu:

f, axarr = plt.subplots(2,2)
axarr[0,0] = plt.imshow(image_datas[0])
axarr[0,1] = plt.imshow(image_datas[1])
axarr[1,0] = plt.imshow(image_datas[2])
axarr[1,1] = plt.imshow(image_datas[3])

Ale wydaje mi się, że nie mogę pokazać innych obrazów. Myślę, że musi być lepszy sposób na zrobienie tego, ponieważ wyobrażam sobie, że próba zarządzania indeksami byłaby uciążliwa. Spojrzałem przez dokumentacja chociaż mam przeczucie, że mogę spojrzeć na niewłaściwą. Czy ktoś mógłby mi podać przykład lub wskazać mi właściwy kierunek?


14
2018-01-22 17:24


pochodzenie


może to jest pomocne: Python, Matplotlib, wykreśla nieregularną siatkę - Lucas
Spójrz na przykłady ilustrujące użycie plt.subplots(). - Goyo


Odpowiedzi:


Problem, który napotykasz, polega na tym, że próbujesz przydzielać Powrót imshow (który jest matplotlib.image.AxesImage do istniejącego obiektu osi.

Poprawny sposób nanoszenia danych obrazu na różne osie w axarr byłoby

f, axarr = plt.subplots(2,2)
axarr[0,0].imshow(image_datas[0])
axarr[0,1].imshow(image_datas[1])
axarr[1,0].imshow(image_datas[2])
axarr[1,1].imshow(image_datas[3])

Koncepcja jest taka sama dla wszystkich podpól iw większości przypadków instancja osi dostarcza tych samych metod, co interfejs pyplot (plt). Na przykład. gdyby ax jest jedną z twoich osi podplotu, aby wykreślić normalny wykres liniowy, którego użyjesz ax.plot(..) zamiast plt.plot(). Można to znaleźć dokładnie w źródle od stronę, do której link.


14
2018-01-22 17:29





Wykreślasz wszystkie swoje obrazy na jednej osi. Co chcesz, aby uzyskać uchwyt dla każdej osi indywidualnie i wykreślić tam swoje obrazy. Tak jak w przypadku:

fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax1.imshow(...)
ax2 = fig.add_subplot(2,2,2)
ax2.imshow(...)
ax3 = fig.add_subplot(2,2,3)
ax3.imshow(...)
ax4 = fig.add_subplot(2,2,4)
ax4.imshow(...)

Aby uzyskać więcej informacji, zajrzyj tutaj: http://matplotlib.org/examples/pylab_examples/subplots_demo.html

W przypadku złożonych układów powinieneś rozważyć użycie metody gridspec: http://matplotlib.org/users/gridspec.html


9
2018-01-22 17:29