matplotlib,如何压缩x轴的零件

发布于 2021-01-29 15:03:30

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

我这里有这个非常简单的代码,可以绘制xy线图

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

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

然后,图如下所示:

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

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

关注者
0
被浏览
68
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    应该这样做:

    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()
    

    我添加了标记以更好地可视化数据点。结果看起来像这样:
    发布代码的结果

    编辑

    如果您想直观地看到轴不连续,则可以在此答案中找到帮助。

    编辑2

    在我的示例中,我仅将y-values传递给plot函数,这意味着x-values被隐式计算为[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()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看