首页 > 解决方案 > 减少 ggplot 图例中的变量数

问题描述

我在 R 中有以下数据框:

       eta      x.1   x.2 x.3     y.1     y.2   y.3    xz.1    xz.2  xz.3
eta.0    1 28.00000 28.00000 28.00000 -1.0000000 -1.0000000 -1.0000000 -1.0000000 -1.0000000 -1.0000000
eta.01   2 27.99999 27.99999 27.99995 -0.9999824 -0.9999824 -0.9999555 -0.9999999 -0.9999999 -0.9999988
eta.1    3 27.98915 28.00041 27.99914 -0.9948991 -0.9996051 -0.9987214 -0.9996547 -1.0000389 -1.0000022
eta.5    4 25.57216 27.98243 27.98737  0.0000000 -0.9922089 -0.9954901 -0.8380154 -0.9995550 -0.9996936
eta.10   5 25.38172 25.94990 28.04486  0.0000000  0.0000000 -1.0172488 -0.8670870 -0.9492688 -1.0004286

我曾经gather构建一个新的数据框并想绘制每个变量。我现在正在尝试绘制所有变量,但是,我想将它们对应于第二个数字一起绘制。所以我想将 , 和 一起绘制x.1y.1创建xz.1一个只有三个变量的图例,比如Model 1, Model 2, Model 3in ggplot

library(tidyverse)
# Gather dataframe
df.gather <- gather(df, "variables", "value", 2:ncol(df))

shapes <- rep(c(15,16,17),3)
colours <- c("#c97a76","#5abd47","#3160e1")
names <- c("Model 1", "Model 2", "Model 3")

ggplot <- ggplot(df.gather, aes(x = eta, y = value, col=variables, group = variables, shape = variables))+
  geom_point()+
  geom_line(show.legend = F)+
  expand_limits(y=30)+
  scale_shape_manual(values = shapes, guide = F)+
  ylab("Point Estimate")+
  theme(axis.line = element_line(colour = "black"),
      axis.ticks.length = unit(.25,"cm"),
      panel.grid.major = element_blank(),
      panel.grid.minor = element_blank(),
      panel.border = element_blank(),
      panel.background = element_blank(),
      legend.key = element_blank(),
      legend.box.background = element_rect(color="black", size=0.5))+
  scale_color_manual(values =  c(rep(colours,3)), guide = F)

我目前有下面的情节,但试图弄清楚是否可以将每个模型合并为 1,并且图例中只有“模型 1”、“模型 2”和“模型 3”对应于形状和颜色。

提前致谢。

文本

标签: rggplot2

解决方案


这是我的做法:创建一个新变量,给出Model,然后将其用于形状和颜色:

df.gather$Model <- gsub("[a-z.]+", "", df.gather$variables)
ggplot(data = df.gather, mapping = aes(x = eta, y = value, group = variables,
                                       color = Model, shape = Model)) +
    geom_point() +
    geom_line() +
    expand_limits(y=30) +
    ylab("Point Estimate")

在此处输入图像描述


推荐阅读