如果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()
輸出:
還可以關掉顯示yticks上y軸完全。在這種情況下,將這一行plt.yticks(yticks)
更改爲:plt.yticks(yticks, visible=False)
在這種情況下,您根本不需要收集代碼的部分代碼。但是如果你保留它,你可以稍後打開顯示,如果需要的話。
爲什麼不只設置三個y-ticks? 'plt.yticks([4270424,4257372,4100356])'你不會增加數據點之間的空間而不改變數據點 - 這個差別甚至不會在對數縮放中顯示出來。 –
@VlasSokolov我想實際看到數字,這些細微的變化是重要的。 – Akshay
我明白@VlasSokolov。你可以改變數據本身(這是沒有道理的),或使用像日誌這樣的轉換。但在這種情況下,只是簡單的日誌不會幫助您,因爲您的數據的大小和相對差異。你可以做'plt.semilogy(data-np.min(data)+1,'ko - ')',但是你混淆瞭解釋,而其他的點會聚集起來。如果你專注於數值,也許你應該使用一張表,除了情節?或者註釋個人興趣點?通常當你看一個情節時,你會收集一些事情的一般行爲。 – tsj