2016-10-11 87 views
2

我一直在試圖在Matplotlib上繪製數據,我似乎有重疊的YTicks。我不知道如何調整它們。在Matplotlib中YTick重疊

代碼

import matplotlib.pyplot as plt 

data= [4270424, 4257372, 4100352, 4100356, 4100356] 

plt.figure(figsize=(10,5)) 

plt.plot(data, 'ko-') 
plt.ylabel('Data point') 
plt.xlabel('Iteration point') 
plt.yticks(data) 

plt.margins(0.05, 0.1) 
plt.show() 

enter image description here

我想那是什麼數字在那裏,但有可能增加數據點之間的空間?

+1

爲什麼不只設置三個y-ticks? 'plt.yticks([4270424,4257372,4100356])'你不會增加數據點之間的空間而不改變數據點 - 這個差別甚至不會在對數縮放中顯示出來。 –

+0

@VlasSokolov我想實際看到數字,這些細微的變化是重要的。 – Akshay

+0

我明白@VlasSokolov。你可以改變數據本身(這是沒有道理的),或使用像日誌這樣的轉換。但在這種情況下,只是簡單的日誌不會幫助您,因爲您的數據的大小和相對差異。你可以做'plt.semilogy(data-np.min(data)+1,'ko - ')',但是你混淆瞭解釋,而其他的點會聚集起來。如果你專注於數值,也許你應該使用一張表,除了情節?或者註釋個人興趣點?通常當你看一個情節時,你會收集一些事情的一般行爲。 – tsj

回答

2

如果y軸上有很多靠近的數據點,它們會重疊。你可以避免顯示所有的人。您只能顯示一個太接近的y-ticks。但其餘的可以顯示在情節本身(不在Y軸上)。

類似的東西可以用:

import matplotlib.pyplot as plt 

data= [4270424, 4257372, 4100352, 4100356, 4100356] 

fig, ax = plt.subplots(figsize=(10,8)) 

#Collect only those ticks that are distant enough from each other 
#in order to get rid of ticks overlapping on y-axis: 
yticks = [min(data)]   
for i in sorted(data[0:]): 
    if i-yticks[-1] > 3500:  
    yticks.append(i)   
################################################################# 

plt.plot(data, 'ko-') 
plt.ylabel('Data point', fontsize=12) 
plt.xlabel('Iteration point', fontsize=12) 
plt.yticks(yticks) 

plt.margins(0.05, 0.1) 


#Showing y-ticks right on the plot 
offset = -1.45 
x = ax.get_xticks() 

for xp, yp in zip(x, data): 
    label = "%s" % yp 
    plt.text(xp-offset, yp+offset, label, fontsize=12, horizontalalignment='right', verticalalignment='bottom') 
################################# 

ax.grid() 
plt.show() 

輸出: enter image description here

還可以關掉顯示yticks上y軸完全。在這種情況下,將這一行plt.yticks(yticks)更改爲:plt.yticks(yticks, visible=False) 在這種情況下,您根本不需要收集代碼的部分代碼。但是如果你保留它,你可以稍後打開顯示,如果需要的話。

+0

雅是一種方式。所以沒有辦法增加點之間的寬度? – Akshay