灵活重复填充调色板

ne

我希望创建一个频率图,并根据变量的级别进行填充。此变量的级别比我要使用的填充调色板中的颜色多scale_fill_economist()填充主要用于简化解释,因此并非所有级别的颜色都需要唯一。因此,我希望循环显示3种颜色。

我遇到两个问题:1)我的绘图中包含一个带有NA的色阶,我无法通过我想出的方法(在下面包括)对它进行着色。2)虽然我正在使用的当前数据集代表19个级别(包括NA级别),但我希望定期重新创建该图,并添加更多级别。因此,我希望代码灵活。我当前的代码是硬编码的。

我设法完成的可复制示例:

library(ggplot2)
library(ggthemes)
Tempfreq <- structure(list(Var1 = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 
                              8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, NA), .Label = c("A", 
                                                                                                   "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", 
                                                                                                   "O", "P", "Q", "R"), class = "factor"), Freq = c(4L, 1L, 3L, 
                                                                                                                                                    1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 7L, 3L, 4L, 1L, 4L, 2L, 27L
                                                                                                   )), .Names = c("Var1", "Freq"), row.names = c(NA, -19L), class = "data.frame")
ggplot(data=Tempfreq, aes(x=Var1, y=Freq, fill=Var1)) + 
geom_bar(stat='identity') + guides(fill=FALSE) + xlab("Level") + ylab("Frequency") + ggtitle("Title") +
geom_text(aes(label=Freq), vjust = 0.5, hjust= -1, size=4, family="ITC Officina Sans") +
coord_flip() + theme_economist() + 
scale_fill_manual(values=c(rep(economist_pal(fill=TRUE)(3), times=length(Tempfreq$Var1)/3), economist_pal(fill=TRUE)(1)))

重要的主线是最后一条,包括scale_fill_manual命令。此命令调用economist_pal()调色板的3个值,并以Var1除以3的长度重复此由于19/3 = 6.33,并且四舍五入,因此仅填充18个级别。这就是为什么我要增加调色板的另一个价值。但是,如图所示,这并不满足NA水平:

我希望有人可以帮助我填写NA数据,并使此代码更灵活。

希罗卡

这对您有用吗?

首先,我们将因子Var1的级别更改为包括“ Missing”,并使“ NA”为“ Missing”:

levels(Tempfreq$Var1) <- c(levels(Tempfreq$Var1),"Missing")
Tempfreq$Var1[is.na(Tempfreq$Var1)] <- "Missing" 

然后,在“ rep”中使用“ length.out”参数来创建颜色:

mycols <- rep(economist_pal(fill=TRUE)(3),length.out=nrow(Tempfreq))

并将这些颜色用作中的参数scale_fill_manual(可以在不分配课程的情况下完成,但是我认为这更具可读性)。

ggplot(data=Tempfreq, aes(x=Var1, y=Freq, fill=Var1)) + 
  geom_bar(stat='identity') + guides(fill=FALSE) + xlab("Level") + ylab("Frequency") + ggtitle("Title") +
  geom_text(aes(label=Freq), vjust = 0.5, hjust= -1, size=4, family="ITC Officina Sans") +
  coord_flip() + theme_economist() + 
  scale_fill_manual(values=mycols)

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章