【问题标题】:Histograms in R with a "more" categorie, similar to MS ExcelR 中具有“更多”类别的直方图,类似于 MS Excel
【发布时间】:2014-02-17 14:12:27
【问题描述】:

考虑以下频率数据:


> table(income)
income
   3    5    6    7    8 5000 
   2    7    2    2    2    1 

当我输入时

 >hist(income) 
我得到以下直方图

因此,您可以看到,大多数收入值都集中在 5 左右,并且有一个值与其他值相距甚远,这一事实使得直方图看起来不太好。 MS Excel 可以将 5000 值视为另一个类别,因此数据应该是这样的:


> table(income)
income
   3    5    6    7    8 more 
   2    7    2    2    2    1 

因此将其绘制为直方图会更好看,这样您就可以看到更短范围内的频率:

是否可以使用hist() 函数或 lattice 或 ggplot2 中的其他函数来执行此操作?但是,我确实不想覆盖超过某个阈值的值,因为我确实会丢失任何信息。

非常感谢!

【问题讨论】:

  • 您显示的图表不是直方图。这是一个(非常糟糕的)条形图,如果您想推断出有关分布的任何信息,它就没有用。相反,您应该考虑进行转型。例如,您可以对您的值进行日志转换。
  • 这是来自 MS Excel 的标准图,我认为转换它只是为了显示我在 R 中的意思是没有意义的。此外,这只是一个示例数据,原始包含连续值超过 80 万次观测
  • 我的意思是,你不应该做你建议做的事。这将导致一个糟糕的图表(注意类别如何从 3 跳到 5,然后以 1 的步长递增)。
  • 我知道你的意思,但这不是我想要的确切输出,你坚持认为 MS Excel 图确实是(我同意你的)一个糟糕的图表,但是重点是如何在不覆盖任何信息的情况下获得“更多”类别(我现在忽略其他类别)。
  • 我不是在谈论确切的 Excel 输出,而是关于 (i) 使用分类 x 轴而不是连续 x 轴和 (ii) 具有“更多”类别。两者都是坏主意。

标签: r excel histogram


【解决方案1】:

数据生成:

income <- c(rep(3,2), rep(5,7), rep(6,2), rep(7,2), rep(8,2), 5000)

为绘图准备数据的功能:

nice.data <- function(x, threshold=10){
  x[x>threshold] <- "More"
  x
}

绘图:

library(ggplot2)
ggplot() + geom_histogram(aes(x=nice.data(income))) + xlab("Income")

结果:

【讨论】:

  • redmode,感谢您的帮助,但我应该指定我不想丢失数据中的任何信息,因此用“更多”覆盖“5000”并不能解决问题,因为我期待
  • 更新到更灵活的版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多