为什么pyplot方法立即适用,而subplot axis方法不适用?

时间:2014-01-25 17:44:51

标签: python matplotlib plot pandas

我正在逐步编辑我的图表。这样,来自plt的{​​{1}}函数立即应用于我的pylab图形输出。那很好。

如果我解决子图的轴,它就不会再发生了。 请在我的最小工作示例中找到两种备选方案。

matplotlib.pyplot

我了解import numpy as np import pandas as pd import matplotlib.pyplot as plt f = plt.figure() sp1 = f.add_subplot(1,1,1) f.show() # This works well sp1.set_xlim([1,5]) # Now I plot the graph df = pd.Series([0,5,9,10,15]) df.hist(bins=50, color="red", alpha=0.5, normed=True, ax=sp1) # ... and try to change the ticks of the x-axis sp1.set_xticks(np.arange(1, 15, 1)) # Unfortunately, it does not result in an instant change # because my plot has already been drawn. # If I wanted to use the code above, # I would have to execute him before drawing the graph. # Therefore, I have to use this function: plt.xticks(np.arange(1, 15, 1)) matplotlib.pyplot实例之间存在差异。我错过了什么,或者只是按照这种方式工作?

2 个答案:

答案 0 :(得分:1)

plt.xticks()方法调用来自draw_if_interactive()的函数pylab_setup(),该函数正在更新图表。要使用sp1.set_xticks()执行此操作,只需调用相应的show()方法:

sp1.figure.show()

答案 1 :(得分:1)

大多数pyplot函数(如果不是全部)在返回之前都会调用plt.draw_if_interactive()。所以,如果你这样做

plt.ion()
plt.plot([1,2,3])
plt.xlim([-1,4])

您获得了随时更新的情节。如果您关闭了互动功能,则在您不致电plt.show()之前,它不会创建或更新地图。

但是所有pyplot函数都是相应的(通常)Axes方法的包装器。

如果您想使用OO界面,并在输入时仍然绘制内容,您可以执行以下操作

plt.ion()  # if you don't have this, you probably don't get anything until you don't call a blocking `plt.show`
fig, ax = plt.subplots() # create an empty plot
ax.plot([1,2,3])  # create the line
plt.draw()  # draw it (you can also use `draw_if_interactive`)
ax.set_xlim([-1,4])  #set the limits
plt.draw()  # updata the plot

您不必使用您不想要的pyplot,只需记住draw