我正在寻找一种防止标签重叠的方法。在搜索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()
答案 0 :(得分: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()
答案 1 :(得分:0)
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()
请注意,如果绘图窗口中显示的图形大于屏幕,它会再次缩小,因此调整大小的图形在保存时仅以新大小显示。或者,您可以选择将其合并到某个带有滚动条的窗口中。