增加x轴上的点之间的间距

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

enter image description here

        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()
2个回答

9

首先,没有您的数据很难确切地知道发生了什么,所以我需要创建虚拟数据并调整您的变量'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()

4
我看到了这篇帖子,但我想保留我的字体大小。我只想增加条形图之间的间距。 - Kuba Chrabański
非常感谢,那个方法起作用了。我以为 tick_params 只能调整文本参数 ;) - Kuba Chrabański
1
它可以做到,但我寻求的主要目标是拉伸x轴而不是缩小标签。 - Kuba Chrabański
1
我不知道这是否符合您的要求,但是您可以在声明时使用plt.figure(figsize=(15,5))来增加图形的大小。 - G. Anderson
我终于找到了一种方法。由于默认宽度为8,对于大量的x轴元素,len(x轴)//4看起来不错,我有一些阈值,超过这个阈值tight_layout()就无法正常工作,当我达到阈值时,我将宽度设置为len(x轴)//4,以获得某种流畅的过渡,扩展图的大小。 - Kuba Chrabański
显示剩余4条评论

3
这个来自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()

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

Pythonpedia的链接(只是从另一个SO问题中抓取的内容)已经失效了。正确的链接在这里:https://stackoverflow.com/questions/44863375/how-to-change-spacing-between-ticks - undefined

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