小编典典

matplotlib,如何压缩x轴的零件

python

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

我这里有这个非常简单的代码,可以绘制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之间的间隔相同。

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


阅读 327

收藏
2021-01-20

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

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

编辑

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

编辑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()
2021-01-20