关于python:如何在Jupyter Notebook中显示文件中的图像?

How can I display an image from a file in Jupyter Notebook?

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

然而,我想,解决这个问题的方法是将绘图/基因组图表写入文件,然后打开内联图像,这将具有相同的结果,如下所示:

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

但是,我无法弄清楚如何做到这一点 - 或者知道它是否可行。 那么有人知道图像是否可以在IPython中打开/显示?


感谢这篇文章,您可以执行以下操作:

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

(官方文件)


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

1
2
3
4
5
6
7
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))


注意,直到现在发布的解决方案只适用于png和jpg!

如果您希望在不导入更多库的情况下更容易,或者想要在Ipython Notebook中显示动画或非动画GIF文件。将要显示它的行转换为markdown并使用这个漂亮的短黑客!

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


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

1
2
3
4
5
6
from IPython.display import display
from PIL import Image


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

您可能需要安装PIL

在Anaconda这是通过打字完成的

1
conda install pillow

由于上述建议没有,我觉得这个有用了。

1
2
3
4
5
6
7
8
9
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()))

您还可以使用PIL在Jupyter Notebook中显示图像文件:

1
2
3
from PIL import Image
path ="cats/cat0.jpg"
display(Image.open(path))

这也适用于循环。


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

1
2
3
4
5
6
7
8
9
10
11
12
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()

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

1
2
3
4
5
6
7
8
9
10
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"))

[见笔记本]