matplotlib使用adjustTex调整文本

2024-06-11 12:09:34 发布

您现在位置:Python中文网/ 问答频道 /正文

enter image description here

这是我用pyplot生成的一个绘图,并且(试图)使用adjustText库(我也在这里找到)调整文本。

如您所见,它在0 < x < 0.1的部分变得非常拥挤。我在想0.8 < y < 1.0中还有足够的空间,这样它们就可以很好地匹配和标记这些点了。

我的尝试是:

plt.plot(df.fpr,df.tpr,marker='.',ls='-') 
texts = [plt.text(df.fpr[i],df.tpr[i], str(df.thr1[i])) for i in df.index] 
adjust_text(texts,
            expand_text=(2,2),
            expand_points=(2,2),
            expand_objects=(2,2),
            force_objects = (2,20),
            force_points = (0.1,0.25),
            lim=150000,
            arrowprops=dict(arrowstyle='-',color='red'),
            autoalign='y',
            only_move={'points':'y','text':'y'}
            )

其中mydf是pandas数据帧,可以找到here

根据我在文档中的理解,我试图通过使它们更大来改变边界框和y力,以为这样会使标签更上一层楼,但事实似乎并非如此。


Tags: text文本绘图dfobjects空间pltpoints
1条回答
网友
1楼 · 发布于 2024-06-11 12:09:34

我是adjustText的作者,很抱歉我刚刚注意到这个问题。你有这个问题,因为你有很多重叠的文本,y坐标完全相同。通过在标签上沿y方向添加一个微小的随机移动,很容易解决这个问题(你确实需要增加文本的力,否则沿着一维它会非常缓慢地工作),如下所示:

np.random.seed(0)
f, ax = plt.subplots(figsize=(12, 6))
plt.plot(df.fpr,df.tpr,marker='.',ls='-') 
texts = [plt.text(df.fpr[i], df.tpr[i]+np.random.random()/100, str(df.thr1[i])) for i in df.index]
plt.margins(y=0.125)
adjust_text(texts,
            force_text=(2, 2),
            arrowprops=dict(arrowstyle='-',color='red'),
            autoalign='y',
            only_move={'points':'y','text':'y'},
            )

还要注意,我增加了沿y轴的边距,这对角点有很大帮助。结果并不十分完美,将算法限制在一个轴上会使工作更加困难。。。但已经没事了。在

enter image description here

不得不提的是,身材的大小非常重要,我不知道你的身材是什么。在

相关问题 更多 >