如何在Jupyter Notebook中显示文件中的图像?


190

我想使用IPython笔记本作为交互式分析我使用Biopython GenomeDiagram模块制作的一些基因组图的方法。尽管有大量有关如何matplotlib在IPython笔记本中用于内联获取图形的文档,但GenomeDiagram使用ReportLab工具箱,我认为IPython不支持内联图形。

但是,我当时想,一种解决方法是将绘图/基因组图写到文件中,然后打开图像内联图像,结果将是相同的,如下所示:

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

但是,我不知道该怎么做-或知道是否可能。有人知道是否可以在IPython中打开/显示图像吗?

Answers:


333

通过此帖子,您可以执行以下操作:

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

官方文档


最好使用公共API而不访问内部函数:from IPython.display import Image从0.13开始应该可以使用。
tomyun

65
如果在循环中,则不会显示图像
muon

6
大多数人会想要DrMcCleod的答案。
AturSams

3
仅当我通过Image(filename ='test.png')显示时,这才对我有用,如以下线程中所建议: from IPython.core.display import Image, display<b /> display(Image(filename='test.png'))
John Strong,

1
如果您希望图像也以幻灯片演示模式显示(使用来运行jupyter nbconvert mynotebook.ipynb --to slides --post serve),则图像路径应以/从网络根目录开始的绝对路径![alt text](/test.jpg "Some Title")
开头

214

如果试图在循环中以这种方式显示Image,则需要将Image构造函数包装在display方法中。

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))

1
为什么?(不要告诉我,否则它将无法正常工作。请解释为什么需要循环调用此“ display”,但如果仅显示一张图像则不需要)。
克里斯(Kris)

10
因为IPython Notebook仅显示单元格中的最后一个返回值,所以只要您有来自同一单元格的两个输出,就需要使用'display'方法。有关更多信息,请参见此问题
DrMcCleod'5

1
您是我的英雄-我已经找了两天了。
ZaxR

1
这很棒。我将如何使下一张图像替换现有的图像,例如随着图像随时间变化而产生动画效果?
blissweb

2
我想知道,我们如何平铺图像?例如显示4x4图像组。
gmagno

31

请注意,到目前为止发布的解决方案仅适用于png和jpg!

如果您希望它更容易而不导入其他库,或者要在Ipython Notebook中显示动画或不动画的GIF文件。将您要显示的行转换为降价标记,并使用此简短的技巧!

![alt text](test.gif "Title")

2
将图像与Jupyter笔记本放置在同一文件夹中,或使用“ relative / path / test.gif”代替“ test.gif”
Philipp Schwarz

23

这将.jpg在Jupyter中导入并显示图像(在Anaconda环境中使用Python 2.7测试)

from IPython.display import display
from PIL import Image


path="/path/to/image.jpg"
display(Image.open(path))

您可能需要安装PIL

在Anaconda中,这是通过键入

conda install pillow

8

感谢页面,当以上建议不起作用时,我发现此方法有效:

import PIL.Image
from cStringIO import StringIO
import IPython.display
import numpy as np
def showarray(a, fmt='png'):
    a = np.uint8(a)
    f = StringIO()
    PIL.Image.fromarray(a).save(f, fmt)
    IPython.display.display(IPython.display.Image(data=f.getvalue()))


2

使用标准numpy,matplotlib和PIL的更干净的Python3版本。合并从URL打开的答案。

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

pil_im = Image.open('image.png') #Take jpg + png
## Uncomment to open from URL
#import requests
#r = requests.get('https://www.vegvesen.no/public/webkamera/kamera?id=131206')
#pil_im = Image.open(BytesIO(r.content))
im_array = np.asarray(pil_im)
plt.imshow(im_array)
plt.show()

2

如果要有效显示大量图像,建议使用IPyPlot软件包

import ipyplot

ipyplot.plot_images(images_array, max_images=20, img_width=150)

在此处输入图片说明

该软件包中还有一些其他有用的功能,您可以在其中以交互式选项卡(每个标签/类别的单独选项卡)显示图像,这对于所有ML分类任务都非常有用。

在此处输入图片说明


0

GenomeDiagram与Jupyter(iPython)一起使用时,显示图像的最简单方法是将GenomeDiagram转换为PNG图像。可以使用IPython.display.Image对象包装它,使其在笔记本中显示。

from Bio.Graphics import GenomeDiagram
from Bio.SeqFeature import SeqFeature, FeatureLocation
from IPython.display import display, Image
gd_diagram = GenomeDiagram.Diagram("Test diagram")
gd_track_for_features = gd_diagram.new_track(1, name="Annotated Features")
gd_feature_set = gd_track_for_features.new_set()
gd_feature_set.add_feature(SeqFeature(FeatureLocation(25, 75), strand=+1))
gd_diagram.draw(format="linear", orientation="landscape", pagesize='A4',
                fragments=1, start=0, end=100)
Image(gd_diagram.write_to_string("PNG"))

[请参阅笔记本]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.