2017-07-14 72 views
0

嘿傢伙這是我第一次在這裏發佈,希望這個問題不是微不足道的。我試圖尋找一個解決方案,但無法找到我想要的。matplotlib,如何壓縮x軸的部分

我這裏有一個非常簡單的代碼繪製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之間的空間相同。

有沒有辦法做到這一點?謝謝!

回答

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值,從而對哪個繪圖開始的值進行變化。對於你的評論中的例子,這將是:

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

這正是我想要的,謝謝! –

+0

嗨對不起,但我有一個後續問題出現了,我不確定如何解決它。基本上我想添加另一條線到同一個地塊,但我希望它在x = 2開始。但是如果我有y1 = [2,3,4,5,6]並添加ax.plot(y1)它會在x = 1處開始這一行。我也嘗試了ax.plot(x1,y1),其中x1 = [2,3,10,11,12]但是這會導致添加新行的原始問題。任何幫助將不勝感激,謝謝! –

+0

@MoustafaNassar查看我對答案的編輯。 –