R:使用ggplot,如何在2个单独的变量中制作具有不同形状的散点图?

问题描述 投票:0回答:1

我想让组织具有不同的颜色和形状,例如心脏是紫色正方形,肝脏是绿色三角形,肺是橙色菱形。此外,我还喜欢采用不同的形状,特别是封闭或开放的形状。因此,控制心将是一个开放的紫色方块。我遇到困难,因为我希望将不同的形状参数应用于两个不同的变量。下面是实现散点图的可重现代码。将不胜感激任何指导!

library(tidyverse)
ex <- data.frame(tissue=rep(c('lung','heart', 'liver'),each=10),
                 treatment=rep(rep(c('smoking','control'),5),each=3),
                 value1=rnorm(30) + rep(c(3,1,4,2,5),each=6),
                  value2=rnorm(30) + rep(c(30,11,43,21,15), each = 6))

ggplot(ex, aes(value1, value2)) +
  geom_point(size = 2, aes(col = tissue, shape = treatment))+
  scale_color_manual(values = c("#7030a0", "#548235", "#c55a11")) +
  scale_shape_manual(values = c(21, 19))

r ggplot2 shapes scatter-plot
1个回答
0
投票

由于您有两层变量,我建议使用

interaction()
创建它们的组合,然后相应地设置比例/图例值。

library(ggplot2)

ggplot(ex, aes(value1, value2)) +
  geom_point(size = 2, aes(col = interaction(tissue, treatment), shape = interaction(tissue, treatment))) +
  scale_color_manual(values = c("heart.control" = "#7030a0", 
                                "heart.smoking" = "#7030a0",
                                "liver.control" = "#548235", 
                                "liver.smoking" = "#548235", 
                                "lung.control" = "#c55a11",
                                "lung.smoking" = "#c55a11"),
                     labels = c("heart", "liver", "lung"),
                     breaks = c("heart.control", "liver.control", "lung.control")) +
  scale_shape_manual(values = c("heart.control" = 15, 
                                "heart.smoking" = 22,
                                "liver.control" = 17, 
                                "liver.smoking" = 24, 
                                "lung.control" = 18,
                                "lung.smoking" = 25),
                     labels = c("control", "treatment"),
                     breaks = c("heart.control", "heart.smoking")) +
  labs(color = "Tissue", shape = "treatment") +
  guides(guides(colour = guide_legend(override.aes = list(fill = c("#7030a0", "#548235", "#c55a11"), shape = c(22, 24, 25)))))

© www.soinside.com 2019 - 2024. All rights reserved.