如果y轴上有许多相近的数据点,则它们会重叠。您可以避免显示所有这些数据点,只显示其中一个过于接近的y刻度。但是其余的数据点可以显示在绘图本身上(而不是在y轴上)。
可以使用类似以下方式:
import matplotlib.pyplot as plt
data= [4270424, 4257372, 4100352, 4100356, 4100356]
fig, ax = plt.subplots(figsize=(10,8))
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)
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()
输出:
您还可以完全关闭y轴上的yticks显示。在这种情况下,将此行plt.yticks(yticks)
更改为: plt.yticks(yticks, visible=False)
在这种情况下,您根本不需要收集代码的刻度。但是如果您保留它,则可以在需要时打开显示。
plt.yticks([4270424, 4257372, 4100356])
这样你就不会增加数据点之间的距离,而又不改变数据点本身——即使在对数缩放下的差异也无法显示。 - Vlas Sokolovplt.semilogy(data-np.min(data)+1, 'ko-')
,但是这会混淆解释,并且其他点会被聚集在一起。如果你关注数字值,也许你应该使用表格来补充绘图?或者注释感兴趣的个别点?通常当你查看绘图时,你正在获取某些东西的一般行为。 - tsjplt.text
对单个数据点进行注释并添加垂直文本标签,您是否能够得到更清晰的解决方案? @akshay - Vlas Sokolov