【问题标题】:Show legend that matplotlib dynamically created显示 matplotlib 动态创建的图例
【发布时间】:2019-10-05 03:37:17
【问题描述】:

我的 df 有 4 列:x、y、z 和分​​组。我创建了一个 3D 图,每个点的指定颜色由它在该行中所属的分组决定。作为参考,“分组”可以是从 1 到 6 的任意数字。代码如下所示:

fig = plt.figure()
ax = Axes3D(fig)
ax.scatter3D(df.x, df.y, df.z, c=df.grouping)
plt.show()

我想在图上显示一个图例,显示哪种颜色属于哪个分组。以前,我使用 Seaborn 进行 2D 绘图,并且自动绘制了图例。如何在 matplotlib 中添加此功能?

【问题讨论】:

    标签: python matplotlib scatter-plot


    【解决方案1】:

    如果要进行颜色映射的值是数字,则解决方案可以很简单:

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    
    a = np.random.rand(3,40)
    c = np.random.randint(1,7, size=a.shape[1])
    
    fig = plt.figure()
    ax = fig.add_subplot(111, projection="3d")
    sc = ax.scatter3D(*a, c=c)
    plt.legend(*sc.legend_elements())
    plt.show()
    

    【讨论】:

    • 比需要的答案更冗长,但绝对为我解决了这个问题!分配sc = ax.scatter3D(df.x, df.y, df.z, c=df.grouping) 然后在绘图之前调用plt.legend(*sc.legend_elements()) 完成了这项工作。谢谢!
    • 这不是“比需要的更详细 [..]”!而是问题不包含minimal reproducible example!
    • 刚刚意识到我最初的回复没有发布,但你是对的。仍然习惯于在 SO 上发帖。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2023-01-18
    • 2012-09-01
    • 2011-02-02
    相关资源
    最近更新 更多