ggplot:对于覆盖相同分组的两个geom,换成不同的色调 [英] ggplot: change hue differently for 2 geoms covering same grouping

查看:444
本文介绍了ggplot:对于覆盖相同分组的两个geom,换成不同的色调的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题来自另一个问题:的想法,让我说明一下:

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆