我正在循环使用一个函数来计算校园中所有课程的所有学生的比赛,然后汇总他们在课程中获得的比赛和成绩,以创建成绩分配。我还将种族和(例如,非裔美国人(192))粘贴到种族中,以表明每个种族群体中的学生人数。然后,我将为每个课程绘制该数据(600多个课程,因此是循环)。我的问题是,当我为每个种族类别分配scale_fill_manual颜色时,它会失败,因为种族类别从一个迭代更改为另一个迭代:第一个可能是非裔美国人(192),第二个可能是非裔美国人(87)所以我无法选择scale_fill_manual值...也就是说,我无法编码
scale_fill_manual(values = c("African American"="violetred1","Asian"="orange3)
因为每个种族的名称都在不断变化。因此,我的问题是,是否有一种方法可以像SQL一样,对值应用通配符……
scale_fill_manual(values = c("African American*"="violetred1","Asian*"="orange3)
或者也许有更好的方法可以做到这一点?
编辑:我的种族,计数和种族计数列如下:
African American, 192, African American (192)
因此,如果有一种方法可以填满种族计数,那么每个组的图例标签为种族(计数),然后将scale_fill_manual分配给种族组保持相同的种族列,那行得通,但我不知道如何做到这一点。
以下是可重现的示例:
library(tidyverse)
library(extdplyr)
library(pacman)
p_load_gh("trinker/wakefield")
set.seed(10)
df1<-dplyr::data_frame(
ID = wakefield::id(n=100),
Race = race(n=100),
Course = group(n=100),
Grade =sample(1:5,100,replace=T))
df1
courselist=list("Treatment","Control")
myplot<-function(coursegrade){
coursegrade<-as.character(coursegrade)
subject<-df1%>%filter(Course==coursegrade)
percents<- pct_routine(subject, Race, Grade)
dat2 = subject %>%
group_by(Race) %>%
summarise(Count = n())
percents<-inner_join(percents, dat2, by = "Race")
percents$Count <- with(percents, paste0("(", Count, ")"))
percents$Race.Eth <- paste(percents$Race, percents$Count)
percents$pct<-percents$pct*100
temp_plot=ggplot(percents,aes(fill=Race.Eth, y=pct, x=Grade)) +
geom_bar(position="dodge", stat="identity", colour="black", width = .8) +
ggtitle("Grade Distributions by Race, 2015 - 2018", subtitle = coursegrade) +
theme(plot.title = element_text(hjust = 0.5), plot.subtitle = element_text(hjust = .5)) +
scale_y_continuous(limits=c(0,70))
ggsave(temp_plot, file=paste0(coursegrade," - grade distribution.jpg"), width = 13, height = 7, units = "in")
print(temp_plot)
}
lapply(courselist,myplot)
答案 0 :(得分:0)
仅在您真正需要的地方,将其总和添加到ggplot代码中的标签中,您就可以避免此问题。例如,假设您仅在图形标题中使用它,然后将标签始终保持为“ African American”(这样就可以使其颜色匹配)并使用labs(title = paste0(my_label, " (", my_count, ")"))
,其中my_label
将与“ African American”和my_count
对应。
答案 1 :(得分:0)
正如@ user2362777所提到的,最好不要在ggplot代码块内执行此标记。在送入gg之前,考虑为“种族”创建新列或编辑原始列。
您的选择包括:
base::match.arg
https://stat.ethz.ch/R-manual/R-devel/library/base/html/match.arg.html?grep
https://www.rdocumentation.org/packages/base/versions/3.5.2/topics/grep str_replace
https://www.rdocumentation.org/packages/stringr/versions/1.4.0/topics/str_replace gsub
https://stat.ethz.ch/R-manual/R-devel/library/base/html/grep.html 在SO上还有与此类似的其他帖子: https://stackoverflow.com/search?q=%5Br%5D+partial+string+match+replace