matplotlib中的散点图未更新xlim和ylim

时间:2014-12-29 12:19:43

标签: matplotlib

鉴于下面的代码,我希望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()

enter image description here

4 个答案:

答案 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.autoscaleAxes.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)

如果你注释掉第一个散点图,一切都会没问题