【问题标题】:Plot only values greater than given value: ggplot R仅绘制大于给定值的值:ggplot R
【发布时间】:2016-12-22 16:12:22
【问题描述】:

在@Nick Criswell 的帮助下,我学会了如何使用 ggplot2aes_string 创建一个绘图函数和 lapplyloop Freq plot with GGPLOT aes_string

我无法将代码修改为仅绘制大于给定阈值的值。在使用函数方法之前,我编写了以下代码:

p <- ggplot(subset(DAT, al.sum>10), aes(word, al.sum, y=freq)) 

问题:如何修改以下代码以仅绘制超过给定阈值的值?即,如果计数大于 10,我只希望每条记录都包含在频率图中。从下面的代码中,对于 al.sum,只有 Dot_Matricks 将包含在图中。

#set work DIR
setwd("C:/A")

#Data create 
DAT <- read.table(text = "ID  a1.sum  b3.sum  c6.sum  d9.sum
April_Showers   10  5   15  0
              Anita_Job   2   3   1   14
              Candy_Cain  4   7   14  17
              Crystal_Ball    6   8   16  12
              Dot_Matricks    15  9   0    1
              Kay_Largo   4   10  5   13", 
              header = TRUE, stringsAsFactors = FALSE)

 #Plot Data function  
 library(ggplot2)

 make_plots = function(data, column){
 ggplot(data, aes_string(x = "ID", y=column)) +
 geom_bar(stat="identity", fill="blue", color="green") +
 theme(plot.background = element_rect(fill = "white"),
      panel.background = element_rect(fill = "white"),        
      panel.grid.major = element_line(colour = "white",size=0.25),
      panel.grid.minor = element_blank(),
      axis.text.x=element_text(size=10,angle=90, hjust=1, 
                               face="plain", family="serif"),
      axis.text.y=element_text(size=10, hjust=1, face="plain", family="serif"), 
      axis.line.x = element_line(color="black", size = 0.50), 
      axis.line.y = element_line(color="black", size = 0.5))
}

#lapply function 
myplots <- lapply(colnames(DAT[2:ncol(DAT)]), make_plots, data = DAT)

#collect names of each col that end with .sum
n <- names(DAT[grep("*.sum",names(DAT))])

#save each plot as .png
for (i in 1:length(n)){
  print(myplots[i])
ggsave(filename=paste0(i,".png"))
}

【问题讨论】:

  • 不要将data发送到ggplot(),而是发送subset(data, a1.sum &gt; 10)
  • 是的,你应该设置子集,但是subset 被认为只是用于交互使用,最好使用data[data$a1.sum &gt; 10, ]

标签: r plot ggplot2


【解决方案1】:

这应该可以解决问题:

make_plots = function(data, column,Threshold){

  PltData <- data[data[,column] >Threshold,]

  Plt <- ggplot(PltData, aes_string(x = "ID", y=column)) +
    geom_bar(stat="identity", fill="blue", color="green") +
    theme_bw()+
    theme(
      panel.grid.major = element_line(colour = "white",size=0.25),
      panel.grid.minor = element_blank(),
      axis.text.x=element_text(size=10,angle=-30, hjust=0)
    )
  # Plt
  ggsave(Plt,filename=paste0(column,".png"))
}

lapply(colnames(DAT[2:ncol(DAT)]), make_plots, data = DAT,Threshold=10)

您也可以使用子集函数来做到这一点。如果您想将绘图返回到您的 R 会话,请评论 ggsave 行并取消注释 Plt

【讨论】:

  • 感谢@Bishops_Guest 完美。
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
相关资源
最近更新 更多