ggplot:对于覆盖相同分组的两个geom,换成不同的色调 [英] ggplot: change hue differently for 2 geoms covering same grouping
问题描述
这个问题来自另一个问题:的想法,让我说明一下:
library(ggplot2)
library(RColorBrewer)
library(reshape2)
library(gridExtra)
library(gtable)
#补充数据
a = rnorm(100,mean = 1)
b = rnorm(100,mean = 0,sd = 1)
ab = data.frame (a,b)
melt = melt(ab)
bpColor = brewer.pal(4,'RdBu')
##创建boxplot
g1< ; - ggplot(melt,aes(fill = variable,x = variable,y = value))+
geom_boxplot(notch = TRUE)+
scale_fill_hue(l = 40)+
theme_bw )
##用较淡的色调创建一个点图
g2 < - ggplot(melt,aes(fill = variable,x = variable,y = value))+
geom_jitter(position = position_jitter(width = .05,height = 0),shape = 21,size = 3)+
scale_fill_hue(l = 100)+
theme(panel.background = element_rect(fill = NA))
gt_boxes< - ggplot_gtable(ggplot_build(g1))
gt_p oint< - ggplot_gtable(ggplot_build(g2))
##覆盖框上的点
just_boxes< - c(subset(gt_boxes $ layout,name ==panel, se = t:r))
g_together< - gtable_add_grob(gt_boxes,gt_points $ grobs [[which(gt_points $ layout $ name ==panel)]],
just_boxes $ t,just_boxes $ l,just_boxes $ b,just_boxes $ l)
grid.draw(g_together)
< img src =https://i.stack.imgur.com/hisfW.pngalt =在这里输入图片描述>
This question comes from another question: Different coloring of groups in R plot
I'd like to elarn to change the hue of one geom without affecting another. So here the boxplot grouping and point grouping map to the same variable. Changing the hue for one changes the other. How could I change the hue for the box fill but not the point fill; in other words make the point fill lighter in color so they stand out against the same color of the box fill?
#Data
library(RColorBrewer)
library(reshape2)
a=rnorm(100, mean=1)
b=rnorm(100, mean=0, sd=1)
ab=data.frame(a,b)
melt=melt(ab)
bpColor=brewer.pal(4, 'RdBu')
#Current
ggplot(melt, aes(fill=variable, x=variable, y=value)) +
geom_boxplot(notch = TRUE) +
geom_jitter(position = position_jitter(width = .05, height =0), shape=21, size=1.5) +
scale_fill_hue(l=40)
It may be simpler to create a boxplot and then a pointplot with a lighter hue, and overlay the points over the boxes. Borrowing the ideas from this post, let me illustrate:
library(ggplot2)
library(RColorBrewer)
library(reshape2)
library(gridExtra)
library(gtable)
# make up data
a=rnorm(100, mean=1)
b=rnorm(100, mean=0, sd=1)
ab=data.frame(a,b)
melt=melt(ab)
bpColor=brewer.pal(4, 'RdBu')
## create a boxplot
g1 <- ggplot(melt, aes(fill=variable, x=variable, y=value)) +
geom_boxplot(notch = TRUE) +
scale_fill_hue(l=40) +
theme_bw()
## create a pointplot with a lighter hue
g2 <- ggplot(melt, aes(fill=variable, x=variable, y=value)) +
geom_jitter(position = position_jitter(width = .05, height =0), shape=21, size=3) +
scale_fill_hue(l=100) +
theme(panel.background = element_rect(fill = NA))
gt_boxes <- ggplot_gtable(ggplot_build(g1))
gt_points <- ggplot_gtable(ggplot_build(g2))
## overlay the points over the boxes
just_boxes <- c(subset(gt_boxes$layout, name == "panel", se = t:r))
g_together <- gtable_add_grob(gt_boxes, gt_points$grobs[[which(gt_points$layout$name == "panel")]],
just_boxes$t, just_boxes$l, just_boxes$b, just_boxes$l)
grid.draw(g_together)
这篇关于ggplot:对于覆盖相同分组的两个geom,换成不同的色调的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!