我在howtogiveatalk.com上发现了David L. Stern的一些有用的数据,在每个分类变量的均值/标准差摘要旁边都有一个抖动图。
我花了一些时间试图在网上找到类似的数字,但是没有。
我不确定他用来创建这些图形的软件和软件包(更新:David Stern回答并解释说他使用定制的Matlab函数)。我对R和ggplot2最熟悉,并且认为使用这些工具可以创建类似的东西。我试图跳进去,但无法弄清楚从这里去哪里。
我如何开始:
library(dplyr)
library(ggplot2)
library(tidyr)
df <- data_frame(a = rnorm(100, mean = 0.75, sd = 0.5), b = rgamma(100, shape = 0.75, scale = 0.5), c = rbinom(100, size = 1, prob = 0.6))
df <- gather(df)
df.sum <- df %>% group_by(key) %>% summarise(mean = mean(value), sd = sd(value))
ggplot(data = df.sum, aes(x = key)) +
geom_jitter(data = df, aes(y = value)) +
geom_point(aes(y = mean)) +
geom_linerange(aes(x = key, y = mean, ymin = (mean - sd), ymax = (mean + sd))) +
theme_bw()
该代码相当粗糙,但是可以使用大部分方式。但是,我不知道如何将geom_point和geom_linerange移动到抖动旁边。
那么如何在R中创建此图形(最好使用ggplot2)呢?
我知道了!我将在此处发布答案,以供将来参考以及其他想要进行类似绘制的人。
对我而言,关键在于将x轴从一个因子转换为一个数值,以便应用该移位。
library(dplyr)
library(ggplot2)
library(tidyr)
set.seed(125)
df <- data_frame(Normal = rnorm(100, mean = 0.5, sd = 0.5),
Gamma = rgamma(100, shape = 0.5, scale = 0.5),
Bimodal = c(rnorm(50, mean = 0.1, sd = 0.15), rnorm(50, mean = 0.9, sd = 0.15))
)
df <- gather(df)
df.sum <- df %>%
group_by(key) %>%
summarise(mean = mean(value), sd = sd(value))
ggplot(data = df, aes(x = key, y = value)) +
geom_jitter(position = position_jitter(width = 0.2), shape = 1, size = 3.5) +
geom_pointrange(data = df.sum, aes(x = as.numeric(key)+0.3, y = mean, ymin = (mean - sd), ymax = (mean + sd))) +
geom_point(data = df.sum, aes(x = as.numeric(key)+0.3, y = mean), size = 3.5) +
theme_bw() + xlab("") + ylab("Arbitrary Units")
如果可以将此代码改编为ggplot扩展名,以使其成为简单的几何图形,那就太好了。如果可以的话,我可能会自己挑战。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句