Matplotlib中的Y轴刻度重叠问题

3

我一直在尝试在Matplotlib上绘制数据,但似乎我的Y轴刻度重叠了。我不确定该如何调整它们。

代码

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

我想要的是数字在那里,但是有可能增加数据点之间的间距吗?


2
为什么不只设置三个y轴刻度?plt.yticks([4270424, 4257372, 4100356])这样你就不会增加数据点之间的距离,而又不改变数据点本身——即使在对数缩放下的差异也无法显示。 - Vlas Sokolov
1
@VlasSokolov 我想要真正看到这些数字,这些微小的变化很重要。 - Akshay
我很欣赏@VlasSokolov。你可以更改数据本身(这没有意义),或者使用像对数变换这样的转换。但是仅仅使用对数在这种情况下也无济于事,因为数据的数量级和相对差异。你可以使用plt.semilogy(data-np.min(data)+1, 'ko-'),但是这会混淆解释,并且其他点会被聚集在一起。如果你关注数字值,也许你应该使用表格来补充绘图?或者注释感兴趣的个别点?通常当你查看绘图时,你正在获取某些东西的一般行为。 - tsj
1
如果您确实想为每个数据点保留标签,请考虑彻底取消y轴刻度。如果通过 plt.text 对单个数据点进行注释并添加垂直文本标签,您是否能够得到更清晰的解决方案? @akshay - Vlas Sokolov
1个回答

4
如果y轴上有许多相近的数据点,则它们会重叠。您可以避免显示所有这些数据点,只显示其中一个过于接近的y刻度。但是其余的数据点可以显示在绘图本身上(而不是在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

您还可以完全关闭y轴上的yticks显示。在这种情况下,将此行plt.yticks(yticks)更改为: plt.yticks(yticks, visible=False) 在这种情况下,您根本不需要收集代码的刻度。但是如果您保留它,则可以在需要时打开显示。


是的,那是一种方法。所以没有办法增加点之间的宽度吗? - Akshay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接