避免在matplotlib中重叠刻度

时间:2017-03-09 10:34:20

标签: python matplotlib

我正在生成这样的情节: enter image description here

当使用较少的刻度时,绘图非常合适,条形宽度足以正确看到它们。然而,当有很多刻度时,而不是使绘图更大,它只是压缩y轴,导致细条和重叠刻度文本。

GstMessage*plt.show()都会发生这种情况。

是否有任何解决方案,因此它将图形绘制成一个刻度,以确保条形具有指定的宽度,而不是更多(如果太少的刻度)而不是更少(太多,重叠)?

编辑: 是的,我正在使用plt.save_fig(),是的,我将barh设置为固定值(8):

height

2 个答案:

答案 0 :(得分:0)

我不太了解您的代码,似乎您使用相同(仅移位)yvalues执行两个绘图,但图像看起来并非如此。如果您有width/2,确定要转移align=center吗?无论如何,改变图像大小:

不,我不确定没有别的办法,但我手边的内容一眼就看不到。手动设置图像尺寸:

fig = plt.figure(figsize=(5, 80))
ax = fig.add_subplot(111)
...your_code

尺寸以厘米为单位。您可以事先计算它,例如尝试

import numpy as np
fig_height = (max(yvalues) - min(yvalues)) / np.diff(yvalue)

这将(大约)将刻度之间的最小距离设置为厘米,这太大了,但尝试调整它。

答案 1 :(得分:0)

我为您的案例考虑两种解决方案:

  1. 如果您要绘制直方图,请使用hist函数[1]。这将自动存储您的数据。只要将alpha值设置为低于1 See this post

    ,您甚至可以绘制多个重叠的直方图
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = mu + sigma*np.random.randn(10000)
    plt.hist(x, 50, normed=1, facecolor='green', 
             alpha=0.75,  orientation='horizontal')
    
  2. 您还可以识别轴刻度线的间隔。这将每10个项目打勾。但我怀疑这会解决你的问题。

    import matplotlib.ticker as ticker
    
    ...
    ax.yaxis.set_major_locator(ticker.MultipleLocator(10))