【问题标题】:Conditional Histograms Using Lattice Package, Output Plots Incorrect使用 Lattice 包的条件直方图,输出图不正确
【发布时间】:2016-08-05 14:16:14
【问题描述】:

我正在使用 lattice 包中的histogram 来绘制两个直方图,以具有两个选项的变量为条件:男性或女性。

histogram(~ raw$Housework_Tot_Min [(raw$Housework_Tot_Min != 0) & 
(raw$Housework_Tot_Min < 1000)] | raw$Gender)

Output of code: two histograms, minutes doing housework by gender

但是,当我实际查看数据时,这些直方图是不正确的。通过绘图:

histogram(~ raw$Housework_Tot_Min [(raw$Housework_Tot_Min != 0) & 
(raw$Housework_Tot_Min < 1000) & (raw$Gender == "Female")]

和:

histogram(~ raw$Housework_Tot_Min [(raw$Housework_Tot_Min != 0) & 
(raw$Housework_Tot_Min < 1000) & (raw$Gender == "Male")]

I get two histograms again, but they look very different

有没有人知道为什么这些输出不匹配?我还有一堆二进制类型的面板要绘制,而不得不单独绘制它们确实违背了使用 lattice 包的目的!

如果这掩盖了对简单概念的基本误解,我深表歉意,我仍然是 R 的初学者!非常感谢您的帮助。

【问题讨论】:

  • 请参考How do I ask a good question?。您至少应该提供一些示例数据,以使代码可重现。
  • 注意:在绘制数据子集时,1)data 参数中的 data.frame 子集或 2) 使用subset 参数。公式中的子集可能不是解决这个问题的方法。
  • 谢谢本;除了美学之外,还有什么理由使用 data 参数并节省自己一直键入 $raw 的时间?只是好奇!

标签: r conditional histogram lattice trellis


【解决方案1】:

问题与panel.args.common 中的不同值有关(即所有面板函数共有的参数,请参阅?trellis.object)。这是一些示例代码来阐明我的观点。

library(lattice)

## paneled plot
hist1 <- histogram( ~ Sepal.Width | Species, data = iris)
hist1$panel.args.common

# $breaks
# [1] 1.904 2.228 2.552 2.876 3.200 3.524 3.848 4.172 4.496
# 
# $type
# [1] "percent"
#
# $equal.widths
# [1] TRUE
# 
# $nint
# [1] 8

## single plot    
hist2 <- histogram( ~ Sepal.Width, data = iris[iris$Species == "setosa", ])
hist2$panel.args.common

# $breaks
# [1] 2.216 2.540 2.864 3.188 3.512 3.836 4.160 4.484
# 
# $type
# [1] "percent"
# 
# $equal.widths
# [1] TRUE
# 
# $nint
# [1] 7

nint(直方图箱数,请参阅?histogram)和breaks(箱断点)在所有目标面板中计算,因此在hist1hist2 之间变化。如果您希望这些参数相同以使两个图看起来相似,则只需在创建两个图后运行以下代码行。

hist2$panel.args.common <- hist1$panel.args.common
## or vice versa, depending on the number of bins and breakpoints to use

library(gridExtra)
grid.arrange(hist1, hist2, ncol = 2)

【讨论】:

  • 感谢您的帮助。但是,问题不在于轴和 bin 宽度不同。问题是在单一性别图上,男性数据最大值为 c。 150 分钟。但是,在拆分面板中,分布完全不同(最大值也不同)。根据代码,为什么两种类型的图不输出相同的值?再次感谢!
  • 啊,现在我明白你的意思了。您应该将此问题报告给R-help mailing list,因为它可能需要开发者网站的审核。
【解决方案2】:

事实证明,问题在于基于使用括号应用的排除项的数据不匹配。而不是:

histogram(~ raw$Housework_Tot_Min [(raw$Housework_Tot_Min != 0) & 
(raw$Housework_Tot_Min < 1000)] | raw$Gender)

应该是:

histogram(~ Housework_Tot_Min [(Housework_Tot_Min != 0) & (Housework_Tot_Min < 1000)] | 
        Gender [(Housework_Tot_Min != 0) & (Housework_Tot_Min < 1000)], data = raw,
      main = "Time Observed Housework by Gender",
      xlab = "Minutes spent",
      breaks = seq(from = 0, to = 400, by = 20))

请注意,现在排除项适用于家务时间和性别变量,从而消除了数据中的不匹配。

正确的情节已粘贴在下面。再次感谢大家的指导。

Updated Histogram

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    相关资源
    最近更新 更多