【问题标题】:Matplotlib increase spacing between points on x-axisMatplotlib 增加 x 轴上点之间的间距
【发布时间】:2019-03-02 14:02:09
【问题描述】:

我正在寻找一种防止标签重叠的方法。在通过 Stackoverflow 搜索时,我什至找不到任何关于如何控制 x 轴间距的建议。

        matplotlib.pyplot.xticks(x, xticks, rotation=90)
        matplotlib.pyplot.plot(x, y)
        matplotlib.pyplot.bar(x, y, alpha=0.2)

        matplotlib.pyplot.title(
            f"średnia cena produktu {self.identifier}, według kontrahentów")
        matplotlib.pyplot.xlabel("kontrahent")
        matplotlib.pyplot.ylabel("cena")


        matplotlib.pyplot.tight_layout()

        matplotlib.pyplot.savefig(os.path.join(
            "products", self.identifier, "wykres.png"))
        matplotlib.pyplot.close()

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    首先,如果没有您的数据,很难确切知道发生了什么,所以我不得不创建虚拟数据并调整您的变量“self.identifier”和“xticks”,因为我们不知道它们是什么; .

    话虽如此,您正在寻找的功能是

    plt.tick_params(axis='x', which='major', labelsize=__)
    

    如下代码所示:

    import numpy as np
    import matplotlib.pyplot as plt
    
    #make dummy data
    x=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40]
    y=np.random.rand(len(x))
    
    plt.figure()
    plt.plot(x, y)
    plt.bar(x, y, alpha=0.2)
    plt.title(f"średnia cena produktu, według kontrahentów")
    plt.xlabel("kontrahent")
    plt.ylabel("cena")
    plt.xticks(x, [str(i) for i in y], rotation=90)
    
    #set parameters for tick labels
    plt.tick_params(axis='x', which='major', labelsize=3)
    
    plt.tight_layout()
    

    【讨论】:

    • 我看到了这篇文章,但我想保持我的字体大小。我只是想增加酒吧之间的距离。
    • 非常感谢你的工作,我认为 tick_params 只能调整文本参数;)
    • 可以,但我一直在寻找的主要目标是拉伸 x 轴而不是缩小标签
    • 不知道是不是你要的,但是你用plt.figure(figsize=(15,5))声明的时候可以增加图的大小
    【解决方案2】:

    pythonpedia.com 的这个解决方案为我解决了这个问题。为了长寿,在这里复制,所有功劳归功于 ImportanceOfBeingEarnest 和页面https://pythonpedia.com/en/knowledge-base/44863375/how-to-change-spacing-between-ticks-in-matplotlib-

    ImportanceOFBeingEarnest 的回答:

    刻度标签之间的间距完全由轴上刻度之间的间距决定。因此,在给定刻度标签之间获得更多空间的唯一方法是使轴更大。

    为了确定标签不重叠所需的空间,可以找出最大的标签并将其长度乘以刻度标签的数量。然后可以调整轴周围的边距并将计算的大小设置为新的图形大小。

    import numpy as np
    import matplotlib.pyplot as plt
    
    N = 150
    data = np.linspace(0, N, N)
    
    plt.plot(data)
    
    plt.xticks(range(N)) # add loads of ticks
    plt.grid()
    
    plt.gca().margins(x=0)
    plt.gcf().canvas.draw()
    tl = plt.gca().get_xticklabels()
    maxsize = max([t.get_window_extent().width for t in tl])
    m = 0.2 # inch margin
    s = maxsize/plt.gcf().dpi*N+2*m
    margin = m/plt.gcf().get_size_inches()[0]
    
    plt.gcf().subplots_adjust(left=margin, right=1.-margin)
    plt.gcf().set_size_inches(s, plt.gcf().get_size_inches()[1])
    
    plt.savefig(__file__+".png")
    plt.show()
    

    请注意,如果绘图窗口中显示的图形大于屏幕,它将再次缩小,因此调整大小的图形仅在保存时以新大小显示。或者,可以选择将其合并到带有滚动条的某个窗口中。

    【讨论】:

      猜你喜欢
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多