【问题标题】:pylab: plotting points with colors and labels (IDs, not categories)pylab:用颜色和标签(ID,而不是类别)绘制点
【发布时间】:2016-10-25 09:32:35
【问题描述】:

我正在尝试用颜色和标签绘制点。这不是一个经典问题:事实上,通常 python 用户将“标签”设置为类别。在这种情况下,我希望颜色代表一个特征,而标签是点本身的标识符。 它遵循一个玩具示例:

x = [-0.01611772,  1.51755901, -0.64869352, -1.80850313, -0.11505037]
y = [ 0.04845168, -0.45576903,  0.62703651, -0.24415787, -0.41307092]

colors = ['b', 'g', 'r', 'b', 'r']
labels = ['Gioele', 'Felix', 'Elpi', 'Roro', 'Cacara']

我想使用 scatter 函数。遵循“快速”文档:

def scatter(x, y, s=20, c=None, marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs) Inferred type: (x: Any, y: Any, s: int, c: Any, marker: unicode, cmap: Any, norm: Any, vmin: Any, vmax: Any, alpha: Any, linewidths: Any, verts: Any, edgecolors: Any, hold: Any, data: Any, kwargs: dict) -> Any

所以,我的尝试是:

import pylab
pylab.scatter(x, y, c=colors, data=labels)
pylab.show()

但它似乎忽略了data=labels 部分。

另外:假设我们可以绘制标签,有没有办法以“智能”方式绘制它们,即标签不会相互隐藏?我需要类似于 R 函数 ggrepel 的东西。

【问题讨论】:

    标签: python r matplotlib label ggrepel


    【解决方案1】:

    我认为在这里使用plt.annotate 是一种选择。举个例子:

    import matplotlib.pyplot as plt
    
    x = [-0.01611772,  1.51755901, -0.64869352, -1.80850313, -0.11505037]
    y = [ 0.04845168, -0.45576903,  0.62703651, -0.24415787, -0.41307092]
    colors = ['b', 'g', 'r', 'b', 'r']
    labels = ['Gioele', 'Felix', 'Elpi', 'Roro', 'Cacara']
    
    plt.scatter(x,y,c=colors)
    for label,xi,yi in zip(labels,x,y):
        plt.annotate(label,xy=(xi,yi),textcoords='offset points',
        ha='left',va='bottom')
    

    这给出了以下输出:

    编辑:我刚刚发现您也询问了重叠标签。 This question 似乎有一个很好的解决方案。显然还有一段代码on github 旨在模拟ggrepel

    【讨论】:

    • “用户警告:您使用了textcoords kwarg,但没有使用xytext kwarg。这可能会导致令人惊讶的结果。”.....尽管如此......它仍然有效.我希望我可以避免 cicle 但.... 至少我有一个解决方案。谢谢! :)
    • 刚刚编辑了一些关于防止标签重叠的内容,抱歉我没有首先发现。有趣的是,我没有得到您所指的UserWarning。您是否通过执行我上面发布的代码得到警告?
    • 我必须删除 textcoords='offset points', 部分才能获得所有标签。
    猜你喜欢
    • 2017-03-07
    • 2012-04-02
    • 2021-06-16
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多