【问题标题】:matplotlib, how to compress parts of x axismatplotlib,如何压缩 x 轴的部分
【发布时间】:2017-07-14 15:58:32
【问题描述】:

大家好,这是我第一次在这里发帖,希望这个问题不会太琐碎。我尝试寻找解决方案,但找不到我想要的。

我这里有一个非常简单的代码来绘制 xy 线图

x = [1,2,3,10,11]
y = [1,2,3,4,5]

plt.plot(x,y)
plt.xticks(x)

然后图表如下所示: Graph

我想要做的是压缩 x 轴,使每个点之间的间距相同。例如,3 到 10 之间的空间与 1 到 2 之间的空间相同。

有没有办法做到这一点?谢谢!

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    应该这样做:

    from matplotlib import pyplot as plt
    
    fig,ax = plt.subplots()
    
    x = [1,2,3,10,11]
    y = [1,2,3,4,5]
    
    ax.plot(y,marker='o')
    ax.set_xticks([i for i in range(len(y))])
    ax.set_xticklabels(x)
    plt.show()
    

    我添加了标记以更好地可视化数据点。结果如下所示:

    编辑

    如果想可视化轴不连续,可以在this answer寻求帮助。

    EDIT2

    在我的示例中,我只将y 值传递给plot 函数,这意味着x 值被隐式计算为[1,2,3,4,5]。当然,您也可以为每个绘图命令显式传递x-values,从而改变绘图开始的x-value。对于您评论中的示例,这将是:

    fig,ax = plt.subplots()
    
    y1 = [1,2,3,4,5]
    x1 = [i for i in range(len(y1))]
    y2 = [2,3,4,5,6]
    x2 = [i+1 for i in range(len(y2))]
    
    xticks = list(set(x1+x2)) #or more explicit: [i for i in range(6)]
    xtick_labels = [1,2,3,10,11,12]
    
    ax.plot(x1,y1,marker='o')
    ax.plot(x2,y2,marker='x')
    ax.set_xticks(xticks)
    ax.set_xticklabels(xtick_labels)
    plt.show()
    

    【讨论】:

    • 嗨对不起,我有一个后续问题出现,我不确定如何解决。基本上我想在同一个图中添加另一条线,但我希望它从 x = 2 开始。但如果我有 y1 = [2,3,4,5,6] 并且我添加 ax.plot(y1) 它会从 x = 1 开始行。我也尝试执行 ax.plot(x1,y1) where x1 = [2,3,10,11,12] 但这导致添加了新行的这篇文章的原始问题.任何帮助将不胜感激,谢谢!
    • @MoustafaNassar 看看我对答案所做的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    相关资源
    最近更新 更多