当前位置:  开发笔记 > 编程语言 > 正文

在matplotlib中"排除"注释?

如何解决《在matplotlib中"排除"注释?》经验,为你挑选了1个好方法。

我最近看到这个包用于R/ggplot2,它允许一个人在一个绘图上有多个注释并自动调整它们的位置以最小化重叠,这样就提高了可读性.python/matplotlib有类似的东西吗?

编辑:我发现Matplotlib重叠注释/文本,它看起来很有希望,但似乎结果不如R包.

例:

from matplotlib import pyplot as plt
import numpy as np
xs = np.arange(10, step=0.1)+np.random.random(100)*3
ys = np.arange(10, step=0.1)+np.random.random(100)*3
labels = np.arange(100)
plt.scatter(xs, ys)
for x, y, s in zip(xs, ys, labels):
    plt.text(x, y, s)
plt.show()

在此输入图像描述

你可以看到,即使这样的短标签在数据密度很高时也会造成一个疯狂的混乱.



1> Phlya..:

[12-11-2016更新了代码和第二个数字,因为从那时起库已经有了显着的改进]

答案完全重写

我为此目的创建了一个小型库,其工作方式类似于上面提到的ggrepel:https://github.com/Phlya/adjustText

通过关闭排斥点,即使对于这个困难的例子,它也会产生一些不错的效果:

from matplotlib import pyplot as plt
from adjustText import adjust_text
import numpy as np

np.random.seed(2016)
xs = np.arange(10, step=0.1) + np.random.random(100) * 3
ys = np.arange(10, step=0.1) + np.random.random(100) * 3
labels = np.arange(100)

f = plt.figure()
scatter = plt.scatter(xs, ys, s=15, c='r', edgecolors='w')
texts = []
for x, y, s in zip(xs, ys, labels):
    texts.append(plt.text(x, y, s))

plt.show()

在此输入图像描述

adjust_text(texts, force_points=0.2, force_text=0.2,
            expand_points=(1, 1), expand_text=(1, 1),
            arrowprops=dict(arrow, color='black', lw=0.5))
plt.show()

在此输入图像描述

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有