使用 Lattice 包的条件直方图,输出图不正确
Conditional Histograms Using Lattice Package, Output Plots Incorrect
我正在使用 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 的初学者!非常感谢您的帮助。
此问题与 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
(箱的断点)在所有目标面板中计算,因此在 hist1
和 hist2
。如果您希望这些参数相同以使两个图看起来相似,则只需 运行 创建两个图后的以下代码行。
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)
事实证明,问题是基于使用括号应用的排除项的数据不匹配。而不是:
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))
请注意,排除项现在同时应用于家务劳动时间和性别变量,从而消除了数据中的不匹配。
下面粘贴了正确的情节。再次感谢大家的指导。
我正在使用 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 的初学者!非常感谢您的帮助。
此问题与 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
(箱的断点)在所有目标面板中计算,因此在 hist1
和 hist2
。如果您希望这些参数相同以使两个图看起来相似,则只需 运行 创建两个图后的以下代码行。
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)
事实证明,问题是基于使用括号应用的排除项的数据不匹配。而不是:
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))
请注意,排除项现在同时应用于家务劳动时间和性别变量,从而消除了数据中的不匹配。
下面粘贴了正确的情节。再次感谢大家的指导。