我是 R 的新手,我确信有一个简单的解决方案,但在尝试了多种方法并观看了相当多的视频后,我想知道是否有人可以帮助给我一些建议。
我想在 2 个 geom_points 之间连接一条线,这是表中两列的平均值。 我已尝试以下操作,但这无法在它们之间连接线路。 请参阅下面的屏幕截图和 r 脚本。
ggplot()+ geom_point(数据= wsd,映射= aes(x =“完整的泥”,y =平均值(Mud_intact)),颜色=“蓝色”,大小= 3)+ geom_point(数据= wsd,映射= aes(x =“沙子完好无损”,y =平均值(Sand_intact)),颜色=“蓝色”,大小= 3)+ 几何线()+ geom_point(数据= wsd,映射= aes(x =“泥毛剪”,y =平均值(Mud_hair.cut)),颜色=“红色”,尺寸= 3)+ geom_point(数据= wsd,映射= aes(x =“沙发剪”,y =平均值(Sand_hair.cut)),颜色=“红色”,大小= 3)+ 几何线()+ labs(title =“不同基材上有/无毛发的平均蠕虫速度的比较”,x =“蠕虫状况和表面类型”,y =“平均速度”)+ 主题_bw()
这给了我以下内容。我想用红线连接红点,用蓝线连接蓝点。
非常感谢任何帮助。
请参阅上文。我尝试存储平均值,然后将这些平均值包含在 geom_line() 函数中,并将 geom_point() 中使用的信息写入 geom_line() 图中,但无济于事。
对于您的情况,您不需要每次调用geom功能都指定数据,最好不要为ggplot添加任何计算,并在添加之前制作最终数据集。
您可以检查我的解决方案的答案,我创建了示例数据集,其中包含四列(请根据您的列名称和数据集格式进行调整)
library(ggplot2)
# Example data
wsd <- data.frame(mud_interact = c(1,2,3,4,5,6),
sand_interact = c(1,3,5,6,8,9),
mud_hair_cut = c(2,4,5,6,7,8),
sand_hair_cut = c(5,6,7,8,9,9))
下面,我通过计算每列的平均值来创建要在图中使用的最终数据
# Create a data frame with column means
means <- data.frame(
variable = names(wsd),
mean_value = colMeans(wsd)
)
如果您想在图中手动缩放颜色,您可以添加新列,因此通过使用 grepl,我为所有交互列添加红色名称,这也有助于减少 ggplot 的工作量
# Determine colors based on variable names
means$color <- ifelse(grepl("interact", means$variable), "red", "blue")
我添加了一个数据(平均值)和aes作为x轴变量名称,y轴作为适当的平均值颜色命令是指定包含值的颜色,这是最终数据集中的颜色列,我们需要在scale_color_manual函数中指定我们的意图好吧。
geom_line 首先用于分割颜色数据(以不同的方式进行交互和混合),然后很容易指定为组和颜色。
# Create a ggplot scatter plot
ggplot(means, aes(x = variable, y = mean_value, color = color)) +
geom_point(size = 3) +
geom_line(data = subset(means, color == "red"), aes(group = 1), linetype = "solid", color = "red") +
geom_line(data = subset(means, color == "blue"), aes(group = 1), linetype = "solid", color = "blue") +
scale_color_manual(values = c("red" = "red", "blue" = "blue")) +
labs(title = "Column Means",
x = "Variable",
y = "Mean Value")