当前位置: 首页 > 知识库问答 >
问题:

将图例添加到颜色为动态的matplotlib散点图

袁轶
2023-03-14

我使用Matplolib和熊猫数据帧创建了一个散点图,现在我想给它添加一个图例。这是我的代码:

colors = ['red' if x >= 150 and x < 200 else 
          'green' if x >= 200 and x < 400 else
          'purple' if x >= 400 and x < 600 else
          'yellow' if x >= 600 else 'teal' for x in myData.R]


ax1.scatter(myData.X, myData.Y, s=20, c=colors, marker='_', label='Test')
ax1.legend(loc='upper left', frameon=False)

这里发生的是,根据myData的值。R,散点图中点的颜色将改变。所以,因为颜色是“动态的”,我在创造传奇时遇到了很多麻烦。实际的代码只会创建一个带有一个名为“测试”的标签的图例,而附近没有任何颜色。

以下是数据示例:

       X  Y    R
0      1  945  1236.334519
0      1  950   212.809352
0      1  950   290.663847
0      1  961   158.156856

我试过了,但我不明白的是:

>

  • 如何动态设置图例的标签?例如,我的代码说'red'if x

    尝试以下操作后,我只得到一个带有单个标签“Classes”的图例:

    `legend1=ax1。图例(*scatter.legend_elements(),loc=“左下”,title=“Classes”)

    ax1。添加艺术家(传奇1)`

    感谢您的任何建议!


  • 共有1个答案

    端木宏才
    2023-03-14

    可以加速的代码的一部分是使用普通的Python循环创建字符串列表。熊猫非常有效地使用Numpy的过滤。散点图的绘制主要取决于点的数量,当所有点一次绘制或分五个部分单独绘制时,点的数量不会改变。

    一些使用matplotlib在循环中分散的示例代码:

    from matplotlib import pyplot as plt
    import numpy as np
    import pandas as pd
    
    N = 500
    myData = pd.DataFrame({'X': np.round(np.random.uniform(-1000, 1000, N), -2), 
                           'Y': np.random.uniform(-800, 800, N)})
    myData['R'] = np.sqrt(myData.X ** 2 + myData.Y ** 2)
    
    fig, ax1 = plt.subplots()
    
    bounds = [150, 200, 400, 600]
    colors = ['teal', 'red', 'green', 'purple', 'gold']
    for b0, b1, col in zip([None]+bounds, bounds+[None], colors):
        if b0 is None:
            filter = (myData.R < b1)
            label = f'$ R < {b1} $'
        elif b1 is None:
            filter = (myData.R >= b0)
            label = f'${b0} ≤ R $'
        else:
            filter = (myData.R >= b0) & (myData.R < b1)
            label = f'${b0} ≤ R < {b1}$'
        ax1.scatter(myData.X[filter], myData.Y[filter], s=20, c=col, marker='_', label=label)
    ax1.legend()
    plt.show()
    

    或者,熊猫的cut可用于创建类别,seaborn的特征(如其hue参数)可进行着色并自动创建图例。

    from matplotlib import pyplot as plt
    import numpy as np
    import pandas as pd
    import seaborn as sns
    
    N = 500
    myData = pd.DataFrame({'X': np.round( np.random.uniform(-1000, 1000, N),-2), 'Y': np.random.uniform(-800, 800, N)})
    myData['R'] = np.sqrt(myData.X ** 2 + myData.Y ** 2)
    
    fig, ax1 = plt.subplots()
    
    bounds = [150, 200, 400, 600]
    colors = ['teal', 'red', 'green', 'purple', 'gold']
    
    hues = pd.cut(myData.R, [0]+bounds+[2000], right=False)
    sns.scatterplot(myData.X, myData.Y, hue=hues, hue_order=hues.cat.categories, palette=colors, s=20, marker='_', ax=ax1)
    plt.show()
    
     类似资料:
    • 问题内容: 我在[这个]杂志上看过这个精彩的情节条款如您所见,这是一个方框图,上面叠加了一个分散的黑色 点:x索引黑点(以随机顺序),y是的变量 兴趣。我想用Matplotlib做一些类似的事情,但是我没有 从哪里开始。到目前为止,我在网上找到的箱线图是 不那么酷,看起来像这样 matplotlib文档: 方框图上色的方法: 问题答案: 你要找的是一种给x轴增加抖动的方法。像这样的东西是从 这里:

    • 我有以下代码用于在 matplotlib 中制作表格图。 plt 是一个拼贴图对象 我想为我使用的颜色图添加一个颜色条。 我试着做<代码>图。colorbar()但这给了我一个画布错误。

    • 这个问题已经被问到了,但我想找到一个更清楚的解决办法。 给定X是100x2数据,标签是标签向量(从1到9),我绘制散点图如下: 如何添加图例来解释一行代码中的颜色?其他解决方案分别绘制每个标签:

    • 下面是关于如何绘制多色线的示例,我可以根据一些彩色地图绘制沿其长度改变颜色的线。为了给剧情添加一个传说,我添加了以下代码: 这会将图例添加到绘图中(下图),但图例中图标的颜色与线条的颜色完全不相关。这是向该绘图添加图例的错误方法,还是matplotlib的限制?

    • 问题内容: 我想制作一个散点图(使用matplotlib),其中根据第三个变量对点进行阴影处理。我对此非常了解: 其中w和M是数据点,而p是我要相对于其着色的变量。 但是我想用灰度而不是彩色。有人可以帮忙吗? 问题答案: 无需手动设置颜色。相反,请指定灰度颜色图… 或者,如果你希望使用更大范围的颜色图,也可以将 指定为。要使用其中任何一个的反向版本,只需指定其中任何一个的“ ”版本即可。例如,而不

    • 本文向大家介绍Python+matplotlib绘制不同大小和颜色散点图实例,包括了Python+matplotlib绘制不同大小和颜色散点图实例的使用技巧和注意事项,需要的朋友参考一下  具有不同标记颜色和大小的散点图演示。 演示结果: 实现代码: 总结 以上就是本文关于Python+matplotlib绘制不同大小和颜色散点图实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他