r - 根据 ggplot2 分组对条形进行着色和阴影/纹理

标签 r ggplot2

我正在尝试制作一个条形图,就像下面的示例数据和脚本一样,从 4 个人在接受治疗之前和之后进行测量。抱歉,我没有足够的声誉来上传示例图片。

我想用某种颜色绘制个体(例如汤姆为绿色,弗雷德红色等),但对于代表治疗的条形,我想在颜色顶部添加对角线以指示治疗。

这很容易实现吗?下面的代码我改编自:Generate ggplot2 boxplot with different colours for multiple groups

提前非常感谢您的任何建议。我希望我想做的事情是有意义的。

示例数据(抱歉,不知道如何上传,因此从 .csv 导入):

Name,Time,Dose,Variable,n,Mean,SD,Median,Upper.SEM,Lower.SEM
Ted,1,0,P,3,20.1341,1.049791,20,0.5728394,0.5569923
Fred,1,0,P,3,38.63702,1.042969,37.74,0.9499892,0.9271918
Tom,6,0,P,3,42.3231,1.073583,43.75,1.7710033,1.6998725
Peter,6,0,P,3,36.01035,1.208213,35.63,4.1551262,3.7252776
Ted,1,1,P,3,22.79528,1.110182,21.64,1.4179833,1.334943
Fred,1,1,P,3,24.25966,1.156925,23.82,2.1300073,1.9580866
Tom,6,1,P,3,13.78995,1.170568,13.15,1.3126463,1.1985573
Peter,6,1,P,3,23.3236,1.4403,20.65,5.4688355,4.4300848

我一直在使用的代码:

g<- ggplot(example, aes(x=Name, y=Mean,fill=interaction(Name,Dose) ))
g<-g + geom_bar(stat="identity", position="dodge") 
g<-g + geom_errorbar(aes(ymax=Mean+Upper.SEM, ymin=Mean-Lower.SEM),       position=position_dodge(0.9), width=0.5)
g<- g+ scale_fill_manual(values=c("green","green","red","red","green","green","red","red"
                    ))
g

最佳答案

您似乎想要使用纹理,正如 @Henrik 评论中的链接所解释的那样,这在 ggplot 中是不可能的。一种可能的解决方法是对名称使用不同的颜色,对剂量使用不同的颜色深浅。

library(ggplot2)
library(RColorBrewer)
categories         <- aggregate(Dose~Name,example,function(x)length(unique(x)))  # number of sub-category for each category
category.palettes  <- c("Purples","Reds","Greens","Blues")
colors <- unlist(lapply(1:nrow(categories),
                        function(i){colorRampPalette(brewer.pal(9,category.palettes[i])[3:7])(categories[i,2])}))
names <- sort(unique(example$Name))

g <- ggplot(example, aes(x=Name, y=Mean,fill=interaction(Dose,Name) ))
g <- g + geom_bar(stat="identity", position="dodge") 
g <- g + geom_errorbar(aes(ymax=Mean+Upper.SEM, ymin=Mean-Lower.SEM), position=position_dodge(0.9), width=0.5)
g <- g+ scale_fill_manual("Subject", values=colors, breaks=paste0("1.",names),labels=names)
g

关于r - 根据 ggplot2 分组对条形进行着色和阴影/纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24435979/

相关文章:

r - 可以强制不出现的元素显示在 ggplot 图例中吗?

r - 如何在ggplot中使用图像作为点?

r - 将定制的 ggpairs() 绘图对象累积到列表对象中

R在多图上的图形之间设置空间

r - 有没有办法在使用因子变量的填充选项的 ggplot 条形图上创建误差线?

r - 关于持续时间与周期如何在加月润滑中工作的混淆

r - 将循环输出存储在 R 中的数据帧中

rnorm 正在生成非随机外观实现

r - 可以在 plotly 中使用文本标签和悬停文本吗?

xml to r 数据提取