拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用ggplot2创建具有形状的图例

使用ggplot2创建具有形状的图例

白鹭 - 2022-01-23 1993 0 0

我为图中绘制了四条拟合线和对应点的图形创建了以下代码。我有传奇的问题。出于某种原因,我找不到将点的不同形状分配给变量名称的方法。此外,颜色与图表中的实际颜色不一致。

y1 <- c(1400,1200,1100,1000,900,800)
y2 <- c(1300,1130,1020,970,830,820)
y3 <- c(1340,1230,1120,1070,940,850)
y4 <- c(1290,1150,1040,920,810,800)

df <- data.frame(x,y1,y2,y3,y4)


g <- ggplot(df, aes(x=x), shape="shape")  
  geom_smooth(aes(y=y1), colour="red", method="auto", se=FALSE)   geom_point(aes(y=y1),shape=14)  
  geom_smooth(aes(y=y2), colour="blue", method="auto", se=FALSE)   geom_point(aes(y=y2),shape=8)  
  geom_smooth(aes(y=y3), colour="green", method="auto", se=FALSE)   geom_point(aes(y=y3),shape=6)  
  geom_smooth(aes(y=y4), colour="yellow", method="auto", se=FALSE)   geom_point(aes(y=y4),shape=2)  
  ylab("x")   xlab("y")   labs(title="overview")
  geom_line(aes(y=1000), linetype = "dashed")
  theme_light()  
  theme(plot.title = element_text(color="black", size=12, face="italic", hjust = 0.5))  
  scale_shape_binned(name="Value g", values=c(y1="14",y2="8",y3="6",y4="2"))

print(g)

我想知道为什么颜色不匹配,以及我如何构建这样一个图例,明确哪个形状对应于哪个变量名称。

uj5u.com热心网友回复:

虽然你可以手动添加传说通过scale_shape_manual,也许是适当的解决办法是重塑你的资料(建议使用tidyr::pivot_longer()y1:y4变量),然后分配所产生的变量,形状美观(这时你可以手动设定颜色根据自己的喜好)。然后,您需要使用单个geom_point()geom_smooth()不是四个。

此外,您还缺少一个可重现的示例( 的值是x多少?),并且您的代码在尝试执行 loess 平滑时会发出一些警告(因为资料点少于执行所需的资料点)。

更新(2021年12月12日)
下面是我们重塑原始资料,并给它使用其ggplot重复的例子aes()功能自动绘制不同geom_point,并geom_smooth为每个“Y组”。我编造了x变量的值

library(ggplot2)
library(tidyr)

x <- 1:6
y1 <- c(1400,1200,1100,1000,900,800)
y2 <- c(1300,1130,1020,970,830,820)
y3 <- c(1340,1230,1120,1070,940,850)
y4 <- c(1290,1150,1040,920,810,800)

df <- data.frame(x,y1,y2,y3,y4)

data2 <- df %>%
  pivot_longer(y1:y4, names_to = "group", values_to = "y")

ggplot(data2, aes(x, y, color = group, shape = group))  
  geom_point(size = 3)      # increased size for increased visibility
  geom_smooth(method = "auto", se = FALSE)

在 RStudio 中逐行运行代码并使用它来检查data2. 我认为这里的结果输出更有意义:

使用 ggplot2 创建具有形状的图例

另一个更新

Freek19,在您的第二个示例中,您需要手动指定形状和颜色比例,以便 ggplot2 认为它们是相同的,如下所示:

library(ggplot2)

data <- ... # from your previous example

ggplot(data, aes(x, y, shape = group, color = group))  
  geom_smooth()  
  geom_point(size = 3)  
  scale_shape_manual("Program type", values=c(1, 2, 3,4,5))  
  scale_color_manual("Program type", values=c(1, 2, 3,4,5))

使用 ggplot2 创建具有形状的图例

希望这可以帮助。

uj5u.com热心网友回复:

我设法接近我想要的,使用:


library(ggplot2)


data <- data.frame(x = c(0,0.02,0.04,0.06,0.08,0.1),
                   y = c(1400,1200,1100,1000,910,850, #y1
                         1300,1130,1010,970,890,840,  #y2
                         1200,1080,980,950,880,820, #y3
                         1100,1050,960,930,830,810, #y4
                         1050,1000,950,920,810,800), #y5
                   
                   group = rep(c("5%","6%","7%","8%","9%"), each = 6))
data

Values <- ggplot(data, aes(x, y, shape = group, color = group))      # Create line plot with default colors
  geom_smooth(aes(color=group))   geom_point(aes(shape=group),size=3)  
  scale_shape_manual(values=c(1, 2, 3,4,5)) 
  geom_line(aes(y=1000), linetype = "dashed")  
  ylab("V(c)")   xlab("c")   labs(title="Valuation") 
  theme_light()  
  theme(plot.title = element_text(color="black", size=12, face="italic", hjust = 0.5)) 
  labs(group="Program Type")

Values

我只被困在 2 个传说中。我想更改两个名称,否则它们会重叠。但是我不知道如何做到这一点。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *