如何向使用facet_wrap创建的绘图添加单独的ggplot标题?
我试图创建一个FOR循环,以获得具有不同变量的多个图形。我使用facet_wrap将它们按城市分为3个不同类别。第一组显示球员的性别,第二组显示哪个体育分支,最后一组显示他们所踢的球队。我在这里的目标是给每个方面一个不同的ggtitle和xlab。我应该用一个新的向量在FOR循环中再次这样做吗 下面是我的数据示例如何向使用facet_wrap创建的绘图添加单独的ggplot标题?,r,ggplot2,R,Ggplot2,我试图创建一个FOR循环,以获得具有不同变量的多个图形。我使用facet_wrap将它们按城市分为3个不同类别。第一组显示球员的性别,第二组显示哪个体育分支,最后一组显示他们所踢的球队。我在这里的目标是给每个方面一个不同的ggtitle和xlab。我应该用一个新的向量在FOR循环中再次这样做吗 下面是我的数据示例 data <- structure(list(Team = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L
data <- structure(list(Team = structure(c(1L, 2L, 3L, 1L, 2L, 3L,
1L, 2L, 3L, 1L, 2L, 3L), .Label = c("T1", "T2", "T3"), class = "factor"),
Sport = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 3L, 3L, 3L), .Label = c("Sport1", "Sport2", "Sport3"), class = "factor"),
Gender = structure(c(2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L,
1L, 2L, 1L), .Label = c("F", "M"), class = "factor"), City = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("City1",
"City2"), class = "factor"), Supporters= c(999L, 888L, 777L,
999L, 888L, 777L, 666L, 555L, 444L, 666L, 555L, 444L)), class = "data.frame", row.names = c(NA,
-12L))
(i在数据中[,c(1:3)]){
graph对于data.table不是很好,但有一个建议是使用列的名称,而不是直接传递列。这样,您可以将分组变量作为标题。您还可以将绘图存储在列表中:
library(ggplot2)
library(data.table)
library(patchwork)
data = data.table(data)
data1 = vector("list",3)
names(data1) = colnames(data)[1:3]
for(i in colnames(data)[1:3]) {
graph <- data[,sum(Population), keyby= c(i,"Region")]
graph[[i]] <- reorder(graph[[i]],graph[["V1"]])
data1[[i]] <- ggplot(graph,aes_string(x=i,y="V1", fill=i))+
geom_bar(stat="identity", width = 0.8, position= position_dodge(width = 0.9))+
theme_bw(base_size = 17) +
theme(axis.text.x=element_text(angle=-90,hjust=1)) +
scale_y_continuous( breaks = seq(0, 50000, by = 5000))+
facet_wrap( ~ Region)+
ylab("Population*Thousand*")+
ggtitle(i)
}
结合:
wrap_plots(data1,ncol=2)
使用data.table不是很好,但有一个建议是使用列的名称,而不是直接传递列。这样可以将分组变量作为标题。还可以将绘图存储在列表中:
library(ggplot2)
library(data.table)
library(patchwork)
data = data.table(data)
data1 = vector("list",3)
names(data1) = colnames(data)[1:3]
for(i in colnames(data)[1:3]) {
graph <- data[,sum(Population), keyby= c(i,"Region")]
graph[[i]] <- reorder(graph[[i]],graph[["V1"]])
data1[[i]] <- ggplot(graph,aes_string(x=i,y="V1", fill=i))+
geom_bar(stat="identity", width = 0.8, position= position_dodge(width = 0.9))+
theme_bw(base_size = 17) +
theme(axis.text.x=element_text(angle=-90,hjust=1)) +
scale_y_continuous( breaks = seq(0, 50000, by = 5000))+
facet_wrap( ~ Region)+
ylab("Population*Thousand*")+
ggtitle(i)
}
结合:
wrap_plots(data1,ncol=2)
你需要使用facet吗?我建议你避免使用
进行-循环,而是使用ggpubr::ggarrange
,因为它可以为你的情况提供更大的灵活性。是的,我必须这样做,这是我老师的作业,他有特定的要求。仅使用data.table和facet,通过为循环创建绘图。你想要什么标题?还有,到目前为止,您的结果是什么?您的代码现在给您提供了哪些您想要更改/添加的内容?刻面根据因子的级别进行标记,这些级别通常按字母顺序排列。您可以通过级别(…)更改顺序
如果您希望它有所不同。对于标题,您必须调用ggtitle()
,或者--我的首选--使用labs(title=…)
。我建议使用粘贴()
如果您希望每组绘图的标题字符串不同,但不确定您希望标题是什么,请调用在循环中创建标题字符串。是否需要使用facet?我建议您避免使用for
-循环,而是使用ggpubr::ggarrange
,因为它允许在您的情况下具有更大的灵活性。是的,我必须这样做对于我的老师的作业,他有特定的要求。仅使用data.table和facet,通过为循环创建绘图。您希望标题是什么?此外,到目前为止,您的结果是什么?您的代码现在给您提供了什么,您希望更改/添加的内容?facet根据因子的级别进行标记,通常是按顺序排列的按字母顺序。如果希望不同,您可以通过级别(…)
更改顺序。对于标题,您必须调用ggtitle()
,或者--我的首选--使用实验室(title=…)
。我建议使用粘贴()
如果您希望每组情节的标题字符串不同,但不确定您希望标题是什么,请在循环中调用创建标题字符串。在我看来,您现在是上帝了。感谢您的帮助和解释。这很完美。如此小但优雅的触摸:)祝您愉快,陛下。eerrmm不,我是人类:)这只是每天练习而已是的。我学到了一些关于数据的知识。今天的表格=)在我眼里,你现在是上帝。谢谢你的帮助和解释。它很完美。这么小但优雅的触感:)祝您愉快,陛下。不,我是人:)这只是每天的练习。我学到了一些关于数据的知识。今天的表格=)
wrap_plots(data1,ncol=2)