Jak mogę wyświetlić obraz z pliku w Notatniku Jupyter?

190

Chciałbym użyć notatnika IPython jako metody interaktywnej analizy niektórych wykresów genomu, które tworzę z GenomeDiagrammodułem Biopython . Podczas gdy istnieje obszerna dokumentacja na temat tego, jak używać matplotlibwykresów wbudowanych w notatniku IPython, GenomeDiagram korzysta z zestawu narzędzi ReportLab, który moim zdaniem nie jest obsługiwany dla graficznego wstawiania w IPython.

Myślałem jednak, że sposobem na obejście tego byłoby zapisanie schematu wykresu / genomu do pliku, a następnie otwarcie obrazu w linii, który miałby ten sam wynik z czymś takim:

gd_diagram.write("test.png", "PNG")
display(file="test.png")

Nie wiem jednak, jak to zrobić - ani nie wiem, czy to możliwe. Czy ktoś wie, czy obrazy można otwierać / wyświetlać w IPython?

zach
źródło

Odpowiedzi:

335

Dzięki uprzejmości tego posta możesz wykonać następujące czynności:

from IPython.display import Image
Image(filename='test.png') 

( oficjalne dokumenty )

zach
źródło
Lepiej byłoby użyć publicznego interfejsu API bez dostępu do elementów wewnętrznych: from IPython.display import Imagepowinien działać od 0,13.
tomyun
65
to nie wyświetla obrazu, jeśli znajduje się w pętli
mion
6
Większość ludzi chciałaby odpowiedzi DrMcCleod.
AturSams,
3
To działa tylko dla mnie, jeśli przekażę obraz (nazwa pliku = 'test.png') do wyświetlenia, zgodnie z zaleceniami w wątku poniżej: from IPython.core.display import Image, display<b /> display(Image(filename='test.png'))
John Strong
1
Jeśli chcesz, aby obraz wyświetlał się także w trybie prezentacji slajdów (z którym jupyter nbconvert mynotebook.ipynb --to slides --post serve/![alt text](/test.jpg "Some Title")
działasz
215

Jeśli próbujesz wyświetlić obraz w ten sposób w pętli, musisz owinąć konstruktor obrazu w metodę wyświetlania.

from IPython.display import Image, display

listOfImageNames = ['/path/to/images/1.png',
                    '/path/to/images/2.png']

for imageName in listOfImageNames:
    display(Image(filename=imageName))
DrMcCleod
źródło
1
Czemu? (Nie mów mi, że inaczej to nie zadziała. Wyjaśnij, dlaczego to wywołanie „display” jest potrzebne w pętli, ale nie, jeśli po prostu wyślesz jeden obraz).
Kris,
10
Ponieważ notebooki IPython wyświetlają tylko ostatnią zwracaną wartość w komórce, więc za każdym razem, gdy masz dwa wyjścia z tej samej komórki, będziesz musiał użyć metody „display”. Zobacz to pytanie, aby uzyskać więcej.
DrMcCleod
1
Jesteś moim bohaterem - szukałem tego przez dwa dni.
ZaxR
1
To jest świetne. Jak sprawić, by następny obraz zastąpił istniejący, jak w przypadku animowanego efektu, gdy obraz zmienia się w czasie?
blissweb,
2
Zastanawiałem się, jak możemy ułożyć obrazy? Na przykład, aby wyświetlić grupę zdjęć 4x4.
gmagno
31

Uwaga, do tej pory opublikowane rozwiązania działają tylko dla png i jpg!

Jeśli chcesz, aby było to jeszcze łatwiejsze bez importowania kolejnych bibliotek lub chcesz wyświetlić animowany lub nieanimowany plik GIF w swoim notesie Ipython. Przekształć linię w miejscu, w którym chcesz ją wyświetlić, aby skorzystać ze znacznika i użyj tego miłego, krótkiego hacka!

![alt text](test.gif "Title")
Philipp Schwarz
źródło
2
umieścić obraz w tym samym folderze co notebooka Jupyter lub zamiast „test.gif”, użyj „względna ścieżka / / test.gif”
Philipp Schwarz