问题描述
我有兴趣为虹膜数据绘制类似的图,并在该图上生成摘要统计信息: https://imgur.com/a/GasBB8r
我在此关注此帖子:How to add summary statistics in histogram plot using ggplot2?
df <- iris
df.m <- melt(df,id="Species")
#Calculating the summary statistics
summ <- df.m %>%
group_by(variable) %>%
summarize(min = min(value),max = max(value),mean = mean(value),q1= quantile(value,probs = 0.25),median = median(value),q3= quantile(value,probs = 0.75),sd = sd(value))
然后我修改了代码以制作密度图,而不是直方图:
p1 <- ggplot(df.m) + geom_density(aes(x = value),fill = "grey",color = "black") +
facet_wrap(~variable,scales="free",ncol = 2)+ theme_bw()
我在这里似乎有问题:
p1+geom_density(data=summ,label =split(summ,summ$variable),npcx = 0.00,npcy = 1,hjust = 0,vjust = 1,size=2)
有人知道问题出在哪里吗?另外,是否可以仅使用ggplot2完成此操作?我正在使用没有管理员权限来下载许多库的计算机(我拥有reshape2,dplyr,ggplot2)。是否应该使用ggplot2中的annotate()函数完成此操作?有没有一种方法可以将每个图形的x轴更改为“对数”?
解决方法
我建议使用下一种方法,因为您只有很少的软件包。您可以将摘要添加为文本批注,但是您应该在每个组的文本位置周围进行调整。如果您在log()
的{{1}}中申请,则aes()
转换也是可能的。我将向您展示两种注释方法。
ggplot()
在这里,我们创建注释:
library(ggplot2)
library(dplyr)
#Data
df <- iris
df.m <- melt(df,id="Species")
如果要定义标签的位置,则必须修改确定x位置的上一节中的#Calculating the summary statistics and create the label
summ <- df.m %>%
group_by(variable) %>%
summarize(min = min(value),max = max(value),mean = mean(value),q1= quantile(value,probs = 0.25),median = median(value),q3= quantile(value,probs = 0.75),sd = sd(value)) %>%
mutate(lab = paste("min = ",round(min,2),"\nmax = ",round(max,"\nmean = ",round(mean,"\nq1 = ",round(q1,"\nmedian = ",round(median,"\nq3 = ",round(q3,"\nsd = ",round(sd,2)),position=c(1.5,0.8,0.25,-2)) %>% select(variable,lab,position)
变量。接下来使用该代码进行绘图:
position
输出:
注释具有#Plot
p1 <- ggplot(df.m) + geom_density(aes(x = log(value)),fill = "grey",color = "black") +
facet_wrap(~variable,scales="free",ncol = 2)+ theme_bw()
p1 <- p1 + geom_text(data = summ,aes(x=position,label = lab),y=Inf,hjust=1,vjust=1.2,size=3)
p1
中定义的x位置。如果要避免这种情况,只需使用下一个代码:
summ
输出:
您可以选择任何这些选项。您应用的功能无法正常工作的原因可能是由于p1 <- ggplot(df.m) + geom_density(aes(x = log(value)),aes(label = lab),x=Inf,size=3)
p1
和grid
软件包造成的。