在ipython笔记本中使用matplotlib内联后端时,默认行为是使用bbox_inches='tight'通过savefig()在内部生成嵌入的png图像。这消除了轴周围的空白,在大多数情况下非常有用。
但是,有时可能需要(暂时)禁用此功能,例如,当他想要手动保持两个图形垂直对齐时(假设我们不想在此处使用子图):
%matplotlib inline
from pylab import *
plot(rand(100))
subplots_adjust(left=0.2) # Has no effect with inline, but works as expected with qt
figure()
plot(rand(100)*10000) # Will result in a larger left margin for this figure...
subplots_adjust(left=0.2)
那么如何禁用这种行为呢?谢谢~
为了使这里涉及的问题更加明确(多亏了Anzel),第二个图,由于ytick标签中显示的数字更多,在Savefig()中的bbox_inches=“紧密”选项触发自动布局调整后,将有更大的左边距(和更小的右边距),由笔记本内部调用以生成嵌入式png输出。它将有效地截断我有意使用subplots_adjust()制作的任何额外空间,以便第二个图形似乎向右移动,而不是与第一个图形垂直“对齐”。
很容易理解我的意思——只需尝试上面的代码片段:)
我在这里不使用子图/子图的原因(参见对Anzel答案的评论)是因为在这种特殊情况下,这两个数字实际上是由几十个小的子图组成的,再加上一些额外的格式/标签。将它们合并成一个更大的子地块数组并不是件小事。。。
您可以使用pyplot.subplots
以网格顺序对齐图形,因此图形将在笔记本中视觉对齐(如果这是您想要的?)
大概是这样的:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
d1 = np.random.rand(100)
d2 = np.random.rand(100)*10000
fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1)
plt.subplots_adjust(left=0.2)
ax1.plot(d1)
ax2.plot(d2)
由于OP要求使用单独的绘图而不是子绘图,这里有一个黑客解决方案。这是我的笔记本,更多关于定制的细节可以在这里找到。
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
# to override ytick.major.width before any plot
plt.rcParams['ytick.major.pad'] = 20
plt.plot(np.random.rand(100))
# another override to set alignment for the plot
plt.rcParams['ytick.major.pad'] = 5
plt.figure()
plt.plot(np.random.rand(100)*10000)
# plt.rcdefaults() will reset everything to defaults as the doc says.
不是最优雅的方式,但它是按要求工作的。
这里有一个更完整的答案: Matplotlib和Ipython笔记本:精确显示将要保存的图形
诀窍是关闭ipython中的bbox\u inches='tight'
设置。暂时这样做有点尴尬,但只需在块中运行IPython魔术:%config InlineBackend。打印_figure_kwargs={'bbox_inches':无}
如果要切换回正常方式,即轴标签不会自动剪切,则可以运行%config InlineBackend。print_figure_kwargs={'bbox_inches':'tight'}
但它必须位于需要精确边界框的绘图块之后。
问题内容: 我正在使用内联模式下的IPython Notebook和plot命令绘制一个NumPy值数组。 结果输出为: 然后,我的图显示在这些输出线的下方。 有没有办法只显示图并从输出中隐藏? 问题答案: 您可以使用分号结束行。这样可以在生成图时抑制不必要的输出: 通常,使用分号可以阻止IPython从代码块的该行打印任何输出值。例如,执行包含代码的单元将不会输出。 另一种方法是将变量绑定到图:
我回顾了各种相关问题,包括 如何让MathJax在ipython笔记本中启用mhchem扩展 但我不能让它工作。。。 我的测试用例很简单 期待直立的$\pi$,但目前只是'\uppi'回来了。 我已经尝试了以下使用细胞魔法 这会生成
如何在IPython笔记本中显示LaTeX代码?
笔记本格式非常适合版本控制:如果想要对笔记本和输出进行版本控制,那么这就很好地工作了。当你只想对输入进行版本控制,而不包括单元输出(也就是“构建产品”)时,麻烦就来了,这些单元输出可以是大的二进制blob,特别是对于电影和情节来说。特别是,我正在努力找到一个好的工作流程,它: 允许我在包含或排除输出之间进行选择, 防止我在不想要输出时意外提交输出, 允许我在本地版本中保留输出, 允许我使用版本控制
好吧,这对我来说是一次非常令人沮丧的冒险。我连续几天花了很多时间试图让MathJax启用并识别ipython笔记本中标记单元格中的mhchem扩展。数学表达式工作正常,但mhchem宏无法识别。我已经尝试在文件。我试着在Markdown窗口中添加以下脚本代码 我已经尝试了在互联网上能找到的每一个技巧和窍门。似乎什么都不管用。 我正在运行debian的喘息声。我想可能是默认的mhchem和MathJ
什么是保持IPython笔记本版本控制的好策略? 笔记本格式非常适合进行版本控制:如果想要对笔记本和输出进行版本控制,那么这种方式非常有效。当人们只想对输入进行版本控制时,麻烦就来了,不包括单元输出(也称为“构建产品”),单元输出可以是大的二进制blob,尤其是电影和情节。特别是,我试图找到一个好的工作流程: 允许我在包括或排除输出之间进行选择, 防止我在不需要时意外提交输出, 允许我将输出保存在