Ggplot: change the hue differently for 2 geomes covering the same grouping

This question starts from another question: Different coloring of groups in graph R

I would like to stubbornly change the shade of one geometry without affecting another. So, here the boxplot grouping and the grouping of points are grouped into the same variable. Changing the hue for one changes the other. How can I change the hue to fill the field, but not to fill the point; in other words, make the fill point lighter in color so that they stand out against the same fill color of the window?

Data needed

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) 

enter image description here

+3
source share
1 answer

, pointplot . , :

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)

enter image description here

+1

Source: https://habr.com/ru/post/1535426/


All Articles