【问题标题】:Creating function to use loops with ggplot2创建函数以使用带有 ggplot2 的循环
【发布时间】:2018-06-14 20:13:35
【问题描述】:

我正在尝试构建一个函数来使用 ggplot2 的循环。以下代码工作正常,我可以得到数据框每个变量的条形图:

    library(ggplot2)
    DF=data.frame(A=c(1,2,1,2,3,2,1,2,3,1,2,3),B=c(2,3,2,2,1,2,3,2,1,2,2,2),C=c(2,3,2,1,1,2,1,1,2,1,2,3))
    data_name<-data.frame("A","B","C")     

    Plot_Graph<-function(x,na.rm=T){
      nm=names(x)
      for (i in seq_along(nm)) {
        print(ggplot(x,aes(x=nm[i],y=x[,i],fill=factor(x[,i]))) +
                geom_bar(width=1,stat="identity")+
                coord_polar(theta="y")+
                ggtitle(data_name[1,i])+
                guides(fill=guide_legend(title=NULL))+
                scale_fill_discrete(breaks=c('1','2','3'),
                                    labels=c('A','B','C')))}}
     Plot_Graph(DF)

但是,当我尝试为每个变量创建一个饼图时,只观察“1”和“2”(不为每个变量选择“3”),每次都会给我同样的错误:

错误:美学必须是长度1或与数据相同(1):x,y,填充

我尝试了以下代码:

    Plot_Bar<-function(x,na.rm=T){
     nm=names(x)
     for (i in seq_along(nm)) {
       x1<-subset(x,nm[i] %in% c('1','2'))
       print(ggplot(x1,aes(x=nm[i],y=x1[,i],fill=factor(x1[,i]))) +
               geom_bar(width=1,stat="identity")+
               coord_polar(theta="y")+
               ggtitle(data_name[1,i])+
               guides(fill=guide_legend(title=NULL))+
               scale_fill_discrete(breaks=c('1','2'),
                             labels=c('A','B')))}}

但它不起作用。我该怎么做才能为每个变量创建一个适当的条形图,其中只有包含“1”和“2”的观察值?

非常感谢。

【问题讨论】:

  • @divibisan 谢谢,但就我而言,我想选择具有特定值(例如“1”和“2”)的观察结果来为每个变量创建图表

标签: r loops ggplot2


【解决方案1】:

您的subset() 不正确。如果您要打印出x1,您会发现它始终是空的。您可以在 R 中交换字符值和符号名称。在这两种情况下,您需要使用不同类型的提取。这是重写子集的一种可能方法

x1 <- x[x[[nm[i]]] %in% c('1','2'), ]

当您需要使用字符串作为列名时,您不能(轻松)使用subset()。

【讨论】:

    猜你喜欢
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多