r - 与 qplot 一致的图例颜色

标签 r ggplot2

考虑以下数据框:

x = read.table(text = 'Lo Re Pe
1 T 33
1 F 22
1 H 11
2 T 22
2 F 22', header = TRUE)

和下面的情节:
qplot(factor(Lo), data=x, geom='bar', fill=Re, weight=Pe, 
      xlab='L', main='Title', ylab='Pe')

现在考虑这个数据框:
x <- read.table(text = 'Lo Re Pe
1 D 33
1 K 22
2 D 22
2 K 22', header=TRUE)

qplot陈述。

分配给每个 Re 的颜色地 block 之间的值不一致,因此很难直接比较地 block 。

如何指定 Re值(value) T例如,应始终为“红色”,并且 Re值(value) F例如,应始终为“蓝色”,以便 qplot命令总是使用 一致每个 Re 的颜色值,不管数据框的内容如何? Re 的值是有限且已知的。 ,所以我可以全部指定。

当数据框包含值 T 时,我尝试了以下操作, FH :
qplot(factor(Lo), data=x, geom='bar', fill=Re, weight=Pe, 
      xlab='Loci', main='Title', ylab='Pe', 
      scale_fill_manual(values=c("Blue","Red","Green"),labels=c("T","F","H")))

但 R 报告关于不正确长度的错误并且不生成绘图。

理想情况下,该解决方案允许我为 Re 的所有可能值指定颜色。 ,即使所有这些可能都不存在于数据框中。

最佳答案

使用 ggplot 的模块化特性,这是完全可能的。 .我会建议你放弃qplot , 但是, 并切换到使用 ggplot() .从长远来看,它不会花费您任何费用并且会更方便,因为它更适合做“复杂”的事情。

让我们从您的两个数据集开始:

x1 = read.table(text = 'Lo Re Pe
1 T 33
1 F 22
1 H 11
2 T 22
2 F 22', header = TRUE)

x2 <- read.table(text = 'Lo Re Pe
1 D 33
1 K 22
2 D 22
2 K 22', header=TRUE)

现在这是你的第一个情节,但翻译成 ggplot() :
p <- ggplot(x1,aes(x = factor(Lo))) + 
        geom_bar(aes(fill = Re,weight = Pe)) + 
        labs(x = 'L',y = 'Pe') + 
        opts(title = 'Title')

为了使绘图中的颜色保持一致,并防止未使用的颜色出现在图例中,我们将简单地创建一个主颜色键,并仅将所需的子集传递给我们的比例:
color_key <- c('red','blue','green','black','orange')
#If Re is a character variable:
names(color_key) <- unique(c(x1$Re,x2$Re))
#If Re is a factor:
names(color_key) <- unique(c(as.character(x1$Re),as.character(x2$Re)))

(您也可以使用 levels 函数执行类似的操作,但我想防止包含未出现在数据集中的级别。)

显然,您可以选择任何您喜欢的颜色。现在我可以自定义 fill我们的情节规模p通过只传递 color_key 的那一段与 scale_fill_manual 相关的:
p + scale_fill_manual(values = color_key[names(color_key) %in% x1$Re])

enter image description here

此外,如果您的地 block 确实具有相同的结构,我们甚至不需要复制 ggplot一遍又一遍地打电话。我们可以简单地应用我们的情节 p到一个新的数据集:
p1 <- p %+% x2

然后添加 fill以同样的方式缩放:
p1 + scale_fill_manual(values = color_key[names(color_key) %in% x2$Re])

enter image description here

最后,让我们自己混合搭配一个新的数据集:
x3 <- rbind(x1[1:2,],x2[3:4,])

同样的过程再次起作用:
p3 <- p %+% x3
p3 + scale_fill_manual(values = color_key[names(color_key) %in% x3$Re])

enter image description here

关于r - 与 qplot 一致的图例颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11361404/

相关文章:

r - 过滤堆积条形图中的 geom_text 值标签

使用 R 中另一个数据帧的其他匹配 ID 替换数据帧中的值

r 直方图中 bin 的百分比 ggplot

r - 如何防止ggplot2中的轴相交

r - 用ggplot2中的横杆连接意味着

r - 使用季度数据格式化scale_x_continuous轴

Rclusterpp.hclust 在使用 cutree 时没有提供正确的集群

r - 在数据框中按数字拆分列

r - 使用 ggplot2 绘制 ECDF 数据

r - data.table 中的条件连接?