我为图中绘制了四条拟合线和对应点的图形创建了以下代码。我有传奇的问题。出于某种原因,我找不到将点的不同形状分配给变量名称的方法。此外,颜色与图表中的实际颜色不一致。
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
. 我认为这里的结果输出更有意义:
另一个更新
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))
希望这可以帮助。
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 评论