如何在jupyter / ipython笔记本中显示图旁边的文本段落

时间:2015-09-06 12:01:28

标签: ipython jupyter

我正在寻找一种(可能是创造性的)方式将文本放在jupyter笔记本中的图形旁边。我们的想法是对图表进行详细描述,而不是通常的笔记本垂直流程。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

一种颇具创造性的方法是模仿内联后端,但添加基础表。 python 2.7的可能解决方案可能看起来像

from io import BytesIO
import matplotlib.pyplot as plt
from IPython.display import display, Image, HTML
import base64

def plotdesc(fig, text, iwidth=None):
    bio = BytesIO()
    # save fig as png to bytes IO instead to disk
    fig.savefig(bio, format='png')
    plt.close(fig)
    iwidth = ' width={0} '.format(iwidth) if iwidth is not None else ''
    img_tag = "<img src='data:image/png;base64," + base64.b64encode(bio.getvalue()) + "'{0}/>".format(iwidth)
    datatable = '<table><tr><td>{0}</td><td>{1}</td></tr></table>'.format(img_tag, text)
    display(HTML(datatable))

用作:

fig, ax = plt.subplots(1,1, figsize=(6,4))
ax.plot([1,2,3])
text = '<h4>Description of the chart:</h4><BR>asdfsa fasdf qwer fsdaf er qw asdcdsafqwer dacfas dfqwetr cvxy fsa'
plotdesc(fig, text, iwidth='500px')

如果您现在将表CSS设置为删除边框,例如

%%html
<style>
table,td,tr,th {border:none!important}
</style>
你得到的情节就像是 enter image description here

当然这个解决方案可以进一步增强使用固定的列宽等。 IIRC的base64编码与python 3.x略有不同。