2016-11-09 144 views
2

我使用ggplot2具有以下绘图函数。R - 使用ggplot2在函数中重新排列条形图

Function_Plot <- function(Fun_Data, Fun_Color) 
{ 
    MyPlot <- ggplot(data = na.omit(Fun_Data), aes_string(x = colnames(Fun_Data[2]), fill = colnames(Fun_Data[1]))) + 
      geom_bar(stat = "count") + 
      coord_flip() + 
      scale_fill_manual(values = Fun_Color) 
    return(MyPlot) 
} 

结果是:

Image

我需要升级我的功能,根据重新排序的话,频率酒吧(按降序排列)。当我看到关于重新排序另一个问题的答案,我尝试在aes_string介绍reorder功能,但它不能正常工作。

重复的例子:

a <- c("G1","G1","G1","G1","G1","G1","G1","G1","G1","G1","G2","G2","G2","G2","G2","G2","G2","G2") 
b <- c("happy","sad","happy","bravery","bravery","God","sad","happy","freedom","happy","freedom", 
     "God","sad","happy","freedom",NA,"money","sad") 

MyData <- data.frame(Cluster = a, Word = b) 
MyColor <- c("red","blue") 

Function_Plot(Fun_Data = MyData, Fun_Color = MyColor) 
+2

尝试'MyData < - as.data.frame(table(MyData [,2],MyData [,1])); MyData [,1] < - reorder(MyData [,1],MyData [,3],FUN = sum); ggplot(data = na.omit(MyData),aes_string(x = colnames(MyData [1]),y = colnames(MyData [ 3]),fill = colnames(MyData [2])))+ geom_bar(stat =“identity”)'。 – lukeA

回答

1

好吧,如果重新排序不起作用aes_string,让我们尝试事前。

Function_Plot <- function(Fun_Data, Fun_Color) 
{ 
    Fun_Data[[2]] <- reorder(Fun_Data[[2]], Fun_Data[[2]], length) 
    MyPlot <- ggplot(data = na.omit(Fun_Data), aes_string(x = colnames(Fun_Data[2]), fill = colnames(Fun_Data[1]))) + 
      geom_bar(stat = "count") + 
      coord_flip() + 
      scale_fill_manual(values = Fun_Color) 
    return(MyPlot) 
} 

Function_Plot() 

enter image description here

情侣其他注意事项 - 我建议你使用更加一致的风格,混合不论是否使用使用_在变量名分开的话是混乱和要求的错误。

它将没有多大关系,除非你的数据是真的,但是从数据帧提取的名字是非常有效的,而子集化数据帧是效率较低。您的代码将数据框分组,然后提取剩余的列名,例如colnames(Fun_Data[1])。提取名称然后将该子集的子集清理干净:colnames(Fun_Data)[1]