微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在散点图中操作级别颜色的最佳方法 - ggplot2分层图和/或为特定行值/或其他值分配颜色?

如何解决在散点图中操作级别颜色的最佳方法 - ggplot2分层图和/或为特定行值/或其他值分配颜色?

这是我的数据框示例:

HRdetails <- data.frame(avgHR = c(96,115,130,120,112,87,114,116,140),DetailCount = c(5,18,4,3,9,2,10,11,19,15),PID = c(1,1,2),Section = c("lab","s1","s2","s3","s4","lab","s4"))
data$Section<-as.factor(data$Section)
data$PID<-as.factor(data$PID)
data$DetailCount<-as.integer(data$DetailCount)

我正在绘制散点图,其中包含每个参与者的单独预测线和样本的整体回归线。

这是我的情节的图片

enter image description here

这是我用来绘制上图的代码

ggplot(data = data,aes(x = avgHR,y = DetailCount)) +
   geom_point(aes(colour=factor(PID)),method="lm",alpha=.75,size = 2) +
   scale_color_manual(values=coul) +
   geom_smooth(aes(colour=factor(PID)),size = .5,se=F) +
   geom_smooth(method="lm",color="black") +
   theme(legend.position="none")

变量 coul 是我的自定义调色板:

coul<-c("#666699","#CCCCFF","#996699","#FFFFCC","#99CC99","#336666","#006699","#000066")
coul<-colorRampPalette(coul)(50)
pie(rep(1,length(coul)),col = coul,main="")

正如您在 df 中看到的,“Section”因子中的一个级别被标记为“lab”。我希望我的图形具有从我制作的 coul 调色板为其他“部分”着色的所有点,但我希望所有“实验室”部分都从此 lab 调色板着色:

lab<-brewer.pal(n=9,name="YlOrRd")
lab<-colorRampPalette(lab)(45)
pie(rep(1,length(lab)),col=lab,main="")

如果我单独绘制实验室点,则散点图如下所示:

enter image description here

这是该散点图的代码

ggplot(data=labstats,aes(x=avgHR,y=DetailCount)) +
  geom_point(aes(colour=factor(PID))) +
  scale_color_manual(values=lab) +
  theme(legend.position = "none")

这是我正在使用的实验室图片

enter image description here

绘制显示 lab 调色板中的所有实验室点和 coul 调色板中的其余点的绘图的最佳方法是什么?

我一直在研究将这些图堆叠在一起,因为理论上这似乎最简单,但我很难弄清楚如何无误地组合这些图并使用两个不同的 dfs。我还考虑将 lab 调色板分配给原始模型可视化中的特定行值,但这似乎很困难/我认为 ggplot 不具备这样做的能力。 如果我错了,请纠正我和/或帮助我解决这个问题。另外,我使用调色板是因为每个参与者都需要为每个数据点拥有自己的离散颜色值。提前致谢。

解决方法

由于您希望每个部分和 PID 具有唯一的颜色,因此您可以定义交互。要在每次交互中获得正确的颜色,您可以创建一个命名向量,然后将该命名向量提供给 scale_color_manual。

library(ggplot2)
library(RColorBrewer)
library(scales) # only used to display color palettes for debugging purposes

data <- data.frame(avgHR = c(96,115,130,120,112,87,114,116,140),DetailCount = c(5,18,4,3,9,2,10,11,19,15),PID = c(1,1,2),Section = c("lab","s1","s2","s3","s4","lab","s4"))
data$Section<-as.factor(data$Section)
data$PID<-as.factor(data$PID)
data$DetailCount<-as.integer(data$DetailCount)

# generate palettes per group
num_lab <- sum(data$Section == 'lab')
num_non_lab <- sum(data$Section != 'lab')

coul<-c("#666699","#CCCCFF","#996699","#FFFFCC","#99CC99","#336666","#006699","#000066")
coul<-colorRampPalette(coul)(sum(data$Section != 'lab'))

lab<-brewer.pal(n=9,name="YlOrRd")
lab<-colorRampPalette(lab)(sum(data$Section == 'lab'))

# display the color palettes
show_col(coul)
show_col(lab)

# create the combined palette,where participants from each group get assigned a color from
# the palette for their group
color_palette <- array(NA,nrow(data))
color_palette[data$Section == 'lab'] <- lab
color_palette[data$Section != 'lab'] <- coul
names(color_palette) <- interaction(data$PID,data$Section)

# plot the data
ggplot(data <- data,aes(x = avgHR,y = DetailCount,color = interaction(PID,Section))) +
  geom_point() + scale_color_manual(values=color_palette)

enter image description here

我在绘图期间还注意到实验室和非实验室的调色板共享一种颜色(十六进制 #FFFFCC)。您可能应该选择不会重叠的不同调色板。这就是为什么实验室和非实验室中的点都会出现这种颜色的原因。

'Coul' 调色板:

enter image description here

“实验室”调色板:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。