【问题标题】:ggplot2 geom_bar, ticks and limitsggplot2 geom_bar,刻度和限制
【发布时间】:2015-05-02 16:05:43
【问题描述】:

我有以下功能:

miss.case = function(x){
  y = apply(x, 1, is.na)
  y = apply(y, 2, sum)
  return(y)
}
miss.hist = function(df, percent=T) {
  m = miss.case(df)
  d = data.frame(number.of.NA = m)
  max.miss = max(m)
  min.miss = min(m)

  if (percent) {
    d$percent = (d$number.of.NA/sum(d$number.of.NA))*100
    g = ggplot(data = d, aes(x = number.of.NA)) +
      geom_bar(aes(y = ((..count..)/sum(..count..))*100)) + 
      scale_y_continuous('percent') +
      xlab("Number of NAs") +
      scale_x_discrete(breaks=min.miss:max.miss)
    return(g)
  }
  else {
    g = ggplot(data = d, aes(x = number.of.NA)) +
      geom_histogram() +
      xlab("Number of NAs") +
      scale_x_discrete(breaks=min.miss:max.miss)
    return(g)
  }
}

使用 ggplot2 可以生成很好的缺失数据直方图。几乎。要查看,请尝试使用一些测试数据:

#make some test data
test.data = as.data.frame(iris)
set.seed(1)
which.remove = cbind(sample(1:150, 250, T),
                     sample(1:5, 250, T))
for (row in 1:nrow(which.remove)) {
  test.data[which.remove[row,1],which.remove[row,2]] = NA
}

#plot missing
miss.hist(test.data)

这应该给你这个:

你明白什么是错的。情节的右侧是奇怪的空洞。现在你可能会想,这很容易通过设置限制来解决,即:limits=c(min.miss, max.miss)。但是不,这解决了问题,但消除了蜱虫!

改变它们的顺序并没有什么不同。如何解决这两个问题?

【问题讨论】:

  • 我刚刚运行了整个脚本并得到了以下错误。 Error in miss.hist(test.data) : could not find function "miss.case"。我想知道您是否想仔细检查您的代码。
  • 对不起,这是一个自定义函数:raw.githubusercontent.com/Deleetdk/psych2/master/psych2.R我会更新帖子。

标签: r ggplot2 histogram


【解决方案1】:

您正在使用带有integer 向量的离散比例。将其转换为factor

g = ggplot(data = d, aes(x = factor(number.of.NA,levels=as.character(seq(0,max.miss,1))))) +

【讨论】:

  • 这行得通,是的。使用整数不起作用有什么实际原因吗?
  • 对此我不确定。 ggplot 对数据类型非常敏感,所以我猜想只要数据是数字/整数,它就需要一个连续的比例。这就是你的第二个情节所建议的。
  • 使用as.factor 的一件事是它会删除空条,而使用整数时它们会出现。这意味着人们必须更加注意条形下方的标签,因为它们可能是例如。 0, 1, 12, 54。对于整数,它们应该是 1, 2, 3, ..., 54。
  • @Delete 好点。为了避免这种情况,我们可以强制级别:factor(number.of.NA, levels=as.character(seq(0,max(number.of.NA))))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 2018-06-05
  • 2017-10-17
  • 2016-10-19
  • 1970-01-01
  • 2015-07-22
相关资源
最近更新 更多