鉴于下面的代码,我希望x轴在0到3之间,并添加一些边距。 相反,它要大得多。我希望分散的调用能够自动更新x轴限制。 我可以设置xlim和ylim自己,但希望自动设置它们。我做错了什么?
import matplotlib.pyplot as plt
if __name__ == '__main__':
fig = plt.figure()
ax = fig.add_subplot(111)
x = [0, 4000, 8000, 100000]
y = [0, 10, 100, 150]
ax.scatter(x, y)
x = [0, 1, 2, 3]
y = x
ax.clear()
ax.scatter(x, y)
plt.show()
答案 0 :(得分:2)
您可以清除图形并打开一个新的子图,而不是根据需要调整轴。
fig = plt.figure()
ax = fig.add_subplot(111)
x = [0, 4000, 8000, 100000]
y = [0, 10, 100, 150]
ax.scatter(x, y)
plt.clf()
ax = fig.add_subplot(111)
x = [0, 1, 2, 3]
y = x
ax.scatter(x, y)
plt.show()
编辑:在此版本中,图形未关闭,只是使用clf函数清除。
答案 1 :(得分:2)
这是一项功能,scatter
不会自动重新限制图表,因为在许多情况下这是不合需要的。请参阅Axes.autoscale
和Axes.relim
ax.relim() # might not be needed
ax.autoscale()
应该做你想做的事。
答案 2 :(得分:1)
这是一种制作另一个散点图而无需清除图形的方法。 我基本上更新了axes.scatter()返回的PathCollection的offests,并将集合添加回轴。当然,必须首先清除轴。我注意到的一件事是我必须手动设置边距。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
x = [0, 4000, 8000, 100000]
y = [0, 10, 100, 150]
scat = ax.scatter(x, y)
x = [0, 1, 2, 3]
y = x
ax.clear()
corners = (min(x), min(y)), (max(x), max(y))
ax.update_datalim(corners)
ax.margins(0.05, 0.05)
ax.autoscale_view()
scat.set_offsets(np.vstack((x,y)).transpose())
ax.add_collection(scat)
plt.show()
答案 3 :(得分:0)
如果你注释掉第一个散点图,一切都会没问题