【发布时间】:2018-12-05 05:25:48
【问题描述】:
我想用经验和正态密度曲线覆盖 ggplot 直方图(y 轴 = 计数)。我试过了:
library(ggplot2)
set.seed(1234)
v <- as_tibble(rnorm(1000, 10, 2.5))
ggplot(v, aes(x = value)) +
geom_histogram(aes(y = ..density..),
bins = 40, colour = "black", fill = "white") +
geom_line(aes(y = ..density.., color = 'Empirical'), stat = 'density') +
stat_function(fun = dnorm, aes(color = 'Normal'),
args = list(mean = 10, sd = 2.5)) +
scale_colour_manual(name = "Colors", values = c("red", "blue"))
但这有 y 尺度的密度,我想要 y 轴的频率。
我的第二次试验产生了以频率(计数)为 y 轴但仅以经验密度为单位的图。
library(ggplot2)
set.seed(1234)
v <- as_tibble(rnorm(1000, 10, 2.5))
b <- seq(0, 20, by = 0.5)
p1 <- ggplot(v, aes(x = value)) +
geom_histogram(aes(y = ..count..),
breaks = b,
binwidth = 0.5,
colour = "black",
fill = "white") +
geom_line(aes(y = ..density.. * (1000 * 0.5),
color = 'Empirical'),
stat = 'density') +
scale_colour_manual(name = "Colors", values = c("red", "blue"))
我无法在同一个图中也显示 dnorm 曲线。例如,当我尝试下一行时,我得到了 x 轴上的密度曲线(蓝线)。
p2 <- p1 + stat_function(fun = dnorm, aes(color = 'Normal'),
args = list(mean = 10, sd = 2.5))
p2
我假设我必须用 binwidth 调整曲线(就像经验线一样),但我不知道该怎么做。
我在 SO 中搜索了这个问题,可以找到许多类似的问题。但他们都解决了我的第一次试验(以密度为 y 轴)、带有计数轴的经验叠加(我的第二次试验)或使用了我不熟悉的其他(基本)绘图命令。
【问题讨论】:
-
其实ggplot2确实支持第二个y轴ggplot2.tidyverse.org/reference/sec_axis.html