Matplotlib& Jupyter - Same命令在不同的单元格中返回不同的结果

时间:2017-07-03 19:35:34

标签: python matplotlib jupyter

第一个Jupyter细胞:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
%matplotlib notebook

plt.figure()
plt.plot((1,2,3))

labels = [item.get_text() for item in plt.gca().get_xticklabels()]
print("Labels are: {}".format(labels))

输出是(除了图表):

标签是:['','','','','&#39 ;,''','','','',&#39 ;']

现在,在另一个单元格中,如果我运行相同的代码:

labels = [item.get_text() for item in plt.gca().get_xticklabels()]
print("Labels are: {}".format(labels))

输出是:

标签是:['',' 0.00',' 0.25',' 0.50',' 0.75',' 1.00',' 1.25',' 1.50',' 1.75',' 2.00','']

为什么引用相同Axes的相同代码会返回不同的结果?

2 个答案:

答案 0 :(得分:0)

而不是:

%matplotlib notebook

使用:

%matplotlib inline

答案 1 :(得分:0)

这是一个有趣的问题,据我所知,当你在两个代码中引用相同的对象时,jupyter所做的实际绘图并不是 - 无效。

当单元格中的代码完成运行时(至少使用笔记本后端)生成绘图本身,并且在生成期间,将填充诸如xtick-labels之类的详细信息。天真地我认为这是因为你可以在图中添加额外的东西来改变图中的 x y 限制,只有这样才能做到这一点。我们需要看到它。

请注意,如果您提前知道它们将会是什么(或者您希望它们是什么),您可以手动在生成图表之前设置xtick-labels:< / p>

plt.gca().set_xticklabels(list_of_labels)

但是,如果在生成绘图之前确实需要标签值,则可以始终使用

plt.gca().get_xticks()

这将返回刻度线的位置列表,从那里可以很容易地制作标签

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
%matplotlib notebook

# generate the figure and axes objects
plt.figure()
plt.plot((1, 2, 3))  # plot the data

# now we can look at the xtick positions, and infer the labels
labels = ["{:.2f}".format(item) for item in plt.gca().get_xticks()]
print("Labels are: {}".format(labels))