使用 ggplot2 线绘制平均值?
Posted
技术标签:
【中文标题】使用 ggplot2 线绘制平均值?【英文标题】:Plotting mean values using ggplot2 line? 【发布时间】:2021-08-28 02:11:50 【问题描述】:从共享的数据集可以看出,$C1 的平均值对于因子“Geminate in $Consonant”比“Singleton”长。
我想在 x 轴上绘制 $Place,在 y 轴上绘制因子列 $Consonant 的 $C1 中的平均值。
Consonant Place C1 C1_xsampa
1 Singleton Bilabial 149.8670 tS
2 Geminate Bilabial 161.3066 tS
3 Singleton Retroflex 115.9713 f
4 Geminate Retroflex 143.3766 f
5 Singleton Dental 130.1839 k
6 Singleton Dental 118.7762 k
7 Geminate Dental 122.1802 k
8 Singleton Velar 112.3296 s
9 Geminate Velar 142.4654 s
10 Singleton Bilabial 245.7727 tS
11 Geminate Bilabial 288.2960 tS
12 Geminate Retroflex 128.9104 f
13 Singleton Dental 103.7978 k
14 Geminate Dental 135.6264 k
15 Singleton Dental 208.1685 k
为了方便您,我附上了一张展示类似情节的图片。我花了几天时间弄清楚这一点。任何想法都会非常有帮助。
############################EDIT################## #####
Place C2_xsampa Consonant C1
1 Velar k Singleton 127
2 Velar k: Geminate 122
3 Bilabial p Singleton 129
4 Bilabial p: Geminate 171
5 Dental t_d Singleton 150
6 Dental t_d: Geminate 172
7 Dental t_d_h Singleton 121
8 Dental t_d_h: Geminate 123
9 Retroflex t` Singleton 109
10 Retroflex t`: Geminate 116
【问题讨论】:
【参考方案1】:目前尚不清楚您的预期输出是什么,但也许此解决方案适合您的用例:
library(tidyverse)
# summarySE func from
# http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/#Helper%20functions
## Gives count, mean, standard deviation, standard error of the mean, and confidence interval (default 95%).
## data: a data frame.
## measurevar: the name of a column that contains the variable to be summariezed
## groupvars: a vector containing names of columns that contain grouping variables
## na.rm: a boolean that indicates whether to ignore NA's
## conf.interval: the percent range of the confidence interval (default is 95%)
summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE,
conf.interval=.95, .drop=TRUE)
library(plyr)
# New version of length which can handle NA's: if na.rm==T, don't count them
length2 <- function (x, na.rm=FALSE)
if (na.rm) sum(!is.na(x))
else length(x)
# This does the summary. For each group's data frame, return a vector with
# N, mean, and sd
datac <- ddply(data, groupvars, .drop=.drop,
.fun = function(xx, col)
c(N = length2(xx[[col]], na.rm=na.rm),
mean = mean (xx[[col]], na.rm=na.rm),
sd = sd (xx[[col]], na.rm=na.rm)
)
,
measurevar
)
# Rename the "mean" column
datac <- rename(datac, c("mean" = measurevar))
datac$se <- datac$sd / sqrt(datac$N) # Calculate standard error of the mean
# Confidence interval multiplier for standard error
# Calculate t-statistic for confidence interval:
# e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1
ciMult <- qt(conf.interval/2 + .5, datac$N-1)
datac$ci <- datac$se * ciMult
return(datac)
dat1 <- read.table(text = "rownumber Consonant Place C1 C1_xsampa
1 Singleton Bilabial 149.8670 tS
2 Geminate Bilabial 161.3066 tS
3 Singleton Retroflex 115.9713 f
4 Geminate Retroflex 143.3766 f
5 Singleton Dental 130.1839 k
6 Singleton Dental 118.7762 k
7 Geminate Dental 122.1802 k
8 Singleton Velar 112.3296 s
9 Geminate Velar 142.4654 s
10 Singleton Bilabial 245.7727 tS
11 Geminate Bilabial 288.2960 tS
12 Geminate Retroflex 128.9104 f
13 Singleton Dental 103.7978 k
14 Geminate Dental 135.6264 k
15 Singleton Dental 208.1685 k",
header = TRUE)
tgc <- summarySE(dat1, measurevar = "C1", groupvars = c("Consonant", "Place"))
ggplot(tgc, aes(x=Place, y=C1,
colour=Consonant,
group = Consonant)) +
geom_errorbar(aes(ymin=C1-se,
ymax=C1+se),
width = 0.2,
position = position_dodge(width = 0.2)) +
geom_line(position = position_dodge(width = 0.2)) +
geom_point(position = position_dodge(width = 0.2))
【讨论】:
【参考方案2】:在将数据提供给 ggplot 之前,应该计算均值。 dplyr 包中的 group_by() 和 summarise() 以及 magrittr 包中的管道运算符 %>% 将顺利完成此操作。
如果上面的数据存储在对象“data”中,那么
library(dplyr)
library(magrittr)
library(ggplot2)
avg_data <- data %>% group_by(Consonant, Place) %>%
summarise(mean_C1 = mean(C1))
ggplot(avg_data, aes(Place, mean_C1, color = Consonant)) +
geom_point()
应该提供您要查找的内容:Means of C1 per consonant and place。
【讨论】:
感谢您的建议。我能听懂你说的。但是,正如问题中提到的,这并没有为我提供所需的输出。我通过发布平均值来编辑问题。请查看发布的示例情节图片。 您应该在原始问题中清楚地指出哪些方面预计会出现在输出中。确切的形状或颜色是否有意义,点(或形状)下方和上方的线应代表哪些值? 感谢您的关注。可以看出,Singleton 和 Geminate 因子之间的数值 C2 差异不是很大。以这种方式考虑:而不是提供的图像中的两个因素(有声 - 无声),我希望输出描述 $Place 中列出的所有四个因素,用于 x 轴上的 Singleton 和 Geminate,以及它们的 C2 值在 y 轴上.我希望以这种方式输出,以便在 $Place 中的所有四个因素上显示 Singleton 和 Geminate 之间的非显着差异。我希望这就足够了。 添加:多个地块我也可以。以上是关于使用 ggplot2 线绘制平均值?的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用ggplot2包使用geom_density()函数绘制分组密度图(线条色彩添加均值线)实战(density plot)
R语言使用ggplot2包使用geom_density()函数绘制分组密度图(填充色配置半透明填充色添加均值线)实战(density plot)