matplotlib,如何压缩x轴的部分

时间:2017-07-14 15:58:32

标签: python matplotlib

嘿伙计们这是我第一次在这里发帖,希望这个问题不是太微不足道。我试图寻找解决方案,但找不到我想要的东西。

我在这里有一个非常简单的代码,它绘制了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之间的空间相同。

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

1 个答案:

答案 0 :(得分:2)

这应该这样做:

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

我添加了标记以更好地可视化数据点。结果如下: result of the posted code

修改

如果您想要想象轴不是连续的,可以在this answer中找到帮助。

<强> EDIT2

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

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