使用补丁自定义散点图中的图例标记面颜色

Posted

技术标签:

【中文标题】使用补丁自定义散点图中的图例标记面颜色【英文标题】:Customize legend marker facecolor in scatterplot with patches 【发布时间】:2020-10-27 21:07:15 【问题描述】:

我有一个散点图,其中还包含一个椭圆。但是,图例仅包含椭圆的格式。我怎样才能反映散点图中的格式?

在下面的示例中,我希望像散点图中一样填充图例标记。

x = np.random.randn(60) 
y = np.random.randn(60)

fig,ax=plt.subplots()
sb.scatterplot(x, y,color='red', ax=ax)
ellipse = matplotlib.patches.Ellipse( 
                xy=(0, 0), width=2, height=3, angle=45, 
                edgecolor='red', facecolor='none'
            )
ax.add_patch(ellipse)

ax.legend(['A'])
plt.show()

【问题讨论】:

【参考方案1】:

Matplotlib 的标准方式是为每个项目分配一个标签以显示在图例中。只有在标准方式不能给出预期结果的情况下,图例才可以是customized。

不带参数调用ax.legend() 会创建默认图例。可以使用Patch' and Line2D` 创建自定义句柄,如下面的代码所示。

import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
from matplotlib.patches import Patch
from matplotlib.lines import Line2D
import numpy as np
import seaborn as sns

x = np.random.randn(60)
y = np.random.randn(60)

fig, ax = plt.subplots()
sns.scatterplot(x, y, color='red', ax=ax, label='scatter dots')
ellipse = Ellipse(xy=(0, 0), width=2, height=3, angle=45,
                  edgecolor='red', facecolor='none', label='ellipse')
ax.add_patch(ellipse)

handles, labels = ax.get_legend_handles_labels()
new_handles = [Patch(facecolor='white', edgecolor='red', hatch='ooo'),
               Line2D([0], [0], marker='o', markerfacecolor='red', markeredgecolor='black', markersize=10, ls='')]
ax.legend(new_handles, labels)
plt.show()

【讨论】:

由于某种原因,它不适用于我的真实数据,但工作示例完美运行。话虽如此,有没有办法在绘图函数之外独立更改图例中标记的格式(facecoloredgecolor

以上是关于使用补丁自定义散点图中的图例标记面颜色的主要内容,如果未能解决你的问题,请参考以下文章

R语言散点图可视化:自定义标题和标签拟合回归线lowess为散点图添加平滑拟合线修改散点图中点颜色和点符号分组散点图添加图例pairs可视化散点图矩阵ggplt2可视化lattice

R语言ggplot2可视化分组散点图将图例放置在图像内部的指定区域自定义缩放图例中颜色标识(增大或者缩小)change size of color elements

如何在python的散点图中添加具有不同标记的多个图例?

Matplotlib风格与样式

Plotly:如何自定义图例?

即使自定义图例单击以使其不可见,如何在折线图中至少显示一行