我正在逐步编辑我的图表。这样,来自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
实例之间存在差异。我错过了什么,或者只是按照这种方式工作?
答案 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