R 灵活重复填充调色板

R 灵活重复填充调色板,r,ggplot2,R,Ggplot2,我希望创建一个基于变量级别的填充频率图。此变量的级别比我希望使用的填充调色板中的颜色多:scale\u fill\u economist()。填充主要用于便于解释,因此并非所有级别的颜色都需要唯一。因此,我希望循环使用3种颜色 我遇到两个问题: 1) 我的绘图包括一个NAs级别,我无法通过我想出的方法(我在下面包括)来着色。 2) 虽然我使用的当前数据集表示19个级别(包括NA级别),但我希望定期重新创建绘图,以便添加更多级别。因此,我希望代码具有灵活性。我当前的代码是硬编码的 我成功完成的可复

我希望创建一个基于变量级别的填充频率图。此变量的级别比我希望使用的填充调色板中的颜色多:
scale\u fill\u economist()
。填充主要用于便于解释,因此并非所有级别的颜色都需要唯一。因此,我希望循环使用3种颜色

我遇到两个问题: 1) 我的绘图包括一个NAs级别,我无法通过我想出的方法(我在下面包括)来着色。 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)))
库(ggplot2)
图书馆(主题)

Tempfreq这对你有用吗

首先,我们将因子Var1的级别更改为包含“缺失”,并将“NA”改为“缺失”:


强制
NA
达到R无法识别为NA的水平。
levels(Tempfreq$Var1) <- c(levels(Tempfreq$Var1),"Missing")
Tempfreq$Var1[is.na(Tempfreq$Var1)] <- "Missing" 
mycols <- rep(economist_pal(fill=TRUE)(3),length.out=nrow(Tempfreq))
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)