Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何向使用facet_wrap创建的绘图添加单独的ggplot标题?_R_Ggplot2 - Fatal编程技术网

如何向使用facet_wrap创建的绘图添加单独的ggplot标题?

如何向使用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

我试图创建一个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), .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)