【发布时间】:2018-01-10 00:57:18
【问题描述】:
This 几年前的回答展示了如何让 jupyter notebook 将图形创建为 svg。解决方案是告诉 InlineBackend 使用svg 作为输出。
import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
plt.plot(...)
这将导致笔记本内以及生成的 ipynb 文件中的所有图像都是 svg 格式;该文件将有一行像
"data": { "image/svg+xml": [ "<?xml .....
在里面。
现在的问题是,如果使用%matplotlib notebook 后端,这将不起作用。 %config InlineBackend 不会更改笔记本后端的任何内容,因此输出文件包含 PNG 图像
"data": { "text/html": [ "<img src=\"data:image/png;base64,iVBORw0....
所以问题是:如何让 ipynb 文件包含使用 %matplotlib notebook 后端创建的静态版本的绘图作为 SVG 图像?
一个月前@mark jay 有一条小评论,他想做我现在想做的事,但没有回答或暗示该评论。
在我的代码中,我直接从数据框中绘制:
%matplotlib notebook
import pandas as pd
df = pd.read_sql(sql1, connection)
...
...
df.plot(subplots=True, kind='bar')
无需导入matplotlib.pyplot 即可完美运行,但也不能强制将图形创建为 svg。我想如果基本情况可行,我可以修改绘图代码,使其不涉及熊猫或数据框。
【问题讨论】:
-
如果你进入 jupyter notebook,直接从 pandas 数据框中绘制一些东西,保存并关闭它,然后在文本编辑器中打开 .ipynb 文件,你会发现你的图形已存储作为 .png,像素级数据。您可以将其存储为 svg,以便某些类型的图形占用更少的空间。
-
我花了一段时间才明白这个问题。因此,我编辑了这个问题,现在让它更清楚。请看一下并确定这是否是您要问的(请注意,问题与熊猫的使用无关)。如果您对我的编辑不满意,请单击我的编辑并使用回滚按钮。
-
是的,谢谢,添加了更多关于熊猫图的信息,但是从你的编辑可以看出你比我更了解这些图形格式,我只知道当它只是条形图时更紧凑几行。
-
我一直在尝试其他绘图库,并且 plotly 似乎为交互式绘图提供了最佳结果。散景也不错。 plot.ly/python
-
感谢您的提示,我读到 plotly 是开源的,没想到它是,也可以看到它在仪表板中。
标签: python pandas matplotlib jupyter-notebook