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

然而,我在想,一种解决这个问题的方法是将绘图/基因组图写入一个文件,然后内联打开图像,结果会是这样的:

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

然而,我不知道如何做到这一点,也不知道这是否可行。那么有人知道IPython中是否可以打开/显示图像吗?


当前回答

如果你想有效地显示大量的图像,我建议使用IPyPlot包

import ipyplot

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

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

其他回答

一个更干净的Python3版本,使用标准numpy, matplotlib和PIL。合并从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()

多亏了这个页面,我发现当上面的建议不起作用时,这个方法是有效的:

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

from IPython.display import Image, display
    
    display(Image(base_image_path))
    

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

如果你想让它更简单,而不需要导入更多的库,或者你想在你的Ipython Notebook中显示一个动画或非动画的GIF文件。转换行,你想显示它markdown和使用这个漂亮的短hack!

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

这是使用opencv-python的解决方案,但它打开的新窗口在等待中很忙

import cv2 # pip install opencv-python
image = cv2.imread("foo.png")
cv2.imshow('test',image)
cv2.waitKey(duration) # in milliseconds; duration=0 means waiting forever
cv2.destroyAllWindows()

如果您不想在另一个窗口中显示图像,请使用matplotlib或其他工具来代替cv2.imshow()

import cv2
import matplotlib.pyplot as plt
image = cv2.imread("foo.png")
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()