如果第一个或最后一个 y 值为 NaN/None,matplotlib 会弄乱 X 轴。这是正常的吗?

标签 matplotlib

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/

相关文章:

matplotlib - 如何在 matplotlib 中自定义标记/符号属性?

python - 在 Matplotlib 中自动重新缩放 ylim 和 xlim

matplotlib - 在子图中使用雷达图

python - 无法让我的程序在 python matplotlib 中为多个补丁设置动画

python - 如何使用matplotlib绘制pyspark sql结果

python - Matplotlib X 轴留下一个名字

python - matplotlib:更改标题和颜色栏文本以及刻度颜色

python - Matplotlib imshow() 的手动定义轴标签

Python seaborn 传说被砍掉

python - 如何并排绘制具有不同 X 坐标的条形图