在 subplot.plot([1, 2, 3], [8, 9, 10])
之后,subplot.axis()
返回一个 x 轴,大致从 1 到 3。
但是在 subplot.plot([1, 2, 3], [None, None, None])
之后,x 从 0 变为 1。
在 subplot.plot([1, 2, 3], [8, 9, None])
之后,它从 1 变为 2。
这正常吗?在这种情况下我应该怎么做才能获得正确的图表? (例如,如果全部无
,则跨越 1 到 3 的空图表)。
#!/usr/bin/env python3
import matplotlib
matplotlib.use("AGG")
import matplotlib.pyplot as plt
def create_plot(ydata):
fig = plt.figure()
subplot = fig.add_subplot(1, 1, 1)
subplot.scatter([1, 2, 3], ydata)
x1, x2, y1, y2 = subplot.axis()
print(f"X axis goes from {x1} to {x2} when ydata={ydata}")
create_plot([8, 9, 10])
create_plot([None, None, None])
create_plot([8, 9, None])
最佳答案
是的,这很正常。
万一ax.plot([1, 2, 3], [None, None, None])
没有要绘制的数据,因此轴不会自动缩放并保持默认值 [0,1]
查看限制。
万一ax.plot([1, 2, 3], [8, 9, None])
,唯一显示的数据是 (1,8)
和(2,9)
。因此x轴范围是1到2。
如果您想在有数据或没有数据的情况下获得相同的 x 轴限制,可以更新数据限制
ax.update_datalim(np.c_[xdata,[0]*len(xdata)], updatey=False)
ax.autoscale()
完整示例:
import numpy as np
import matplotlib.pyplot as plt
def create_plot(ydata):
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
xdata = [1, 2, 3]
ax.scatter(xdata, ydata)
ax.update_datalim(np.c_[xdata,[0]*len(xdata)], updatey=False)
ax.autoscale()
x1, x2, y1, y2 = ax.axis()
print(f"X axis goes from {x1} to {x2} when ydata={ydata}")
create_plot([8, 9, 10])
create_plot([None, None, None])
create_plot([8, 9, None])
plt.show()
关于如果第一个或最后一个 y 值为 NaN/None,matplotlib 会弄乱 X 轴。这是正常的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59161329/