【问题标题】:Create Legend for geom_text labels为 geom_text 标签创建图例
【发布时间】:2020-04-29 21:11:36
【问题描述】:

我想创建一个散点图,将每个点绘制为数字而不是圆形。我需要一个将散点图中的数字标签映射到样本名称的图例。

我当前的尝试使用此代码:

plot<-ggplot(df_mds,aes(x=x,y=y,group=interaction(Group,Sample)))+geom_text(aes(label=Label,color=Group,group=Sample),show.legend =T)
plot<-plot+guide()
plot<-plot+labs(x="Leading logFC dimension 1", y="Leading logFC dimension 2")

使用这些数据:

并创建此图:

上面的图表几乎正是我想要的,除了我需要一个将“标签”列中的值映射到“样本”列中的值的图例。

我见过这个post,但我不知道如何组合不同的形状来创建新的数字。

任何帮助将不胜感激。

【问题讨论】:

  • 如果您将数据(使用dput)与您的问题一起粘贴,会更容易提供帮助。

标签: r ggplot2 legend geom-text


【解决方案1】:

您正在寻找的是基于label= 美学创建图例的能力。不幸的是,答案是你不能——至少不能轻易使用ggplot。我建议使用替代方法。在这里,我使用以下示例数据集提供两个选项:

scatter.plot <- data.frame(
    sampleName=paste0('Sample_',1:18),
    x=sample(1:10, 18, replace=TRUE),
    y=sample(1:10, 18, replace=TRUE),
    id=1:18,
    grp=c(rep('Group A', 6), rep('Group B', 6), rep('Group C',6))
)

在您的点和ggrepel 包上使用标签以避免标签重叠。

您的样本名称足够短,您可以在图上添加标签。它可能会有点拥挤,所以我建议使用 ggrepel 包中的 geom_text_repelgeom_label_repel 函数来帮助进行过度绘图。美学和各种参数可以根据自己的喜好进行调整:

ggplot(scatter.plot, aes(x,y)) +
    geom_point(aes(color=grp), size=2.5) +
    geom_text_repel(
        aes(label=sampleName), color='gray45',
        min.segment.length = 0, size=3,
        force=10, direction='y') +
    theme_bw()

使用颜色和形状

不确定这是否适合您,但如果您调整组的形状和示例的形状,您可以使用ggplot 相当轻松地为每个示例获取开箱即用的图例。当然,它需要颜色才能正确区分:

ggplot(scatter.plot, aes(x,y)) +
    geom_point(aes(shape=grp, color=sampleName), size=2)

【讨论】:

  • “标签”美学在ggplot中不能有它的传奇是有根本原因吗?如果标签很长,您建议的第一个解决方法不适合。为了在不引入太多颜色的情况下解决这个问题,我想在情节中使用缩写,在图例中使用“缩写:完整标签”。如果可以从标签美学中创建传奇,这将很容易做到。
猜你喜欢
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多