我想使用來自兩個不同條件(下面示例中的 A 和 B)的資料創建直方圖。我想geom_histogram在 R 中使用在同一個圖中繪制兩個分布。
但是,對于條件 A,似乎顯示了整個資料集的分布(而不是僅顯示了 A)。
在下面的示例中,顯示了三種情況:
- 繪制 A 和 B
- 僅繪制 A
- 僅繪制 B
當您比較 1) 和 2) 時,您會發現 A 的分布并不相同。
誰能解釋為什么會發生這種情況以及如何解決這個問題?
set.seed(5)
# Create test data frame
test <- data.frame(
condition=factor(rep(c("A", "B"), each=200)),
value =c(rnorm(200, mean=12, sd=2.5), rnorm(200, mean=13, sd=2.1))
)
# Create separate data sets
test_a <- test[test$condition == "A",]
test_b <- test[test$condition == "B",]
# 1) Plot A and B
ggplot(test, aes(x=value, fill=condition))
geom_histogram(binwidth = 0.25, alpha=.5)
ggtitle("Test A and AB")
# 2) Plot only A
ggplot(test_a, aes(x=value, fill=condition))
geom_histogram(binwidth = 0.25, alpha=.5)
ggtitle("Test A")
# 3) Plot only B
ggplot(test_b, aes(x=value, fill=condition))
geom_histogram(binwidth = 0.25, alpha=.5)
ggtitle("Test B")
uj5u.com熱心網友回復:
可視化的替代方案,而不是取代 MichaelDewar 的回答:
ggab <- ggplot(test, aes(x=value, fill=condition))
geom_histogram(binwidth = 0.25, alpha=.5, position = "identity")
ggtitle("Test A and AB")
xlim(5, 20)
ylim(0, 13)
# 2) Plot only A
gga <- ggplot(test_a, aes(x=value, fill=condition))
geom_histogram(binwidth = 0.25, alpha=.5)
ggtitle("Test A")
xlim(5, 20)
ylim(0, 13)
# 3) Plot only B
ggb <- ggplot(test_b, aes(x=value, fill=condition))
geom_histogram(binwidth = 0.25, alpha=.5)
ggtitle("Test B")
xlim(5, 20)
ylim(0, 13)
library(patchwork) # solely for a quick side-by-side-by-side presentation
gga ggab ggb plot_annotation(title = 'position = "identity"')

此可視化中的關鍵是添加position="identity"到第一個 hist(其他人不需要它)。
或者,可以使用position="dodge"(最好在控制臺上查看,在這個小快照上有點困難)。

對于透視圖,position = "stack"默認值顯示“A”和明顯改變的直方圖。

uj5u.com熱心網友回復:
這些圖堆疊在 A B 圖中。所以 A 條從 B 條的頂部開始。此外,軸上的縮放比例不同。也可能是 bin 有不同的端點。
所以,是的,A B 圖顯示了總分布。填充有助于您查看 A 和 B 中的每一個的貢獻。
如果要覆寫兩個圖,請使用:
ggplot(mapping = aes(x=value, fill=condition))
geom_histogram(data = test_a, binwidth = 0.25, alpha=.5)
geom_histogram(data = test_b, binwidth = 0.25, alpha=.5)
ggtitle("Test A and AB")
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/389573.html
上一篇:R:替換現有范圍之外的值
