我正在用摘要统计数据注释我的图表。我想使用粗体字体来快速将用户的注意力吸引到按组划分的最佳/最差统计数据。突出显示的数字需要在运行时由数据本身确定。
以下是使用 ChickWeight 数据集的示例,显示了小鸡体重根据饮食的变化:
library(ggplot2)
library(dplyr)
# Calculate end vs start weights
df <- merge(filter(ChickWeight, Time==21), filter(ChickWeight, Time==0), by=c("Chick", "Diet"))
df$dWeight <- df$weight.x - df$weight.y
# Summary statistics: sd & mean
df.stat <- do.call(data.frame,
aggregate(dWeight ~ Diet,
data=df,
FUN = function(x) c(SD=sd(x), MN=mean(x))))
ggplot(data = df) +
facet_grid(Diet ~ .) +
geom_histogram(binwidth=10, aes(x=dWeight)) +
geom_vline(data=df.stat, aes(xintercept = dWeight.MN), color="black") +
geom_text(data=df.stat, aes(x=Inf,
y=Inf,
label = sprintf("\nmean = %4.1f\nsd = %4.1f",
dWeight.MN, dWeight.SD),
hjust=1,
vjust=1))
Run Code Online (Sandbox Code Playgroud)
在下图中,我只想突出显示以下文本:
在第 3 组中,“mean = 229.5”将变为“mean = 229.5 ”
在第 4 组中,“sd = 43.9”将变为“sd = 43.9 ”
如果您不想在解析中浪费时间,您可以在绘图标签中添加一个条件,这样您就会非常接近。
df.plot <- df %>%
# Combine df and df.stat -
# this also removes the calls to df.stat in your secondary geoms.
left_join(df.stat, by = "Diet") %>%
# Add global maximum of MN and global minimum of SD to every row.
mutate(dWeight.MN.max = max(dWeight.MN),
dWeight.SD.min = min(dWeight.SD))
Run Code Online (Sandbox Code Playgroud)
ggplot(data = df.plot) +
facet_grid(Diet ~ .) +
geom_histogram(binwidth = 10, aes(x = dWeight)) +
geom_vline(aes(xintercept = dWeight.MN), color="black") +
geom_text(aes(x = Inf,
y = Inf,
label = sprintf("\nmean = %4.1f", dWeight.MN),
hjust = 1,
vjust = 1,
# bold if mean == mean maximum
fontface = ifelse(dWeight.MN == dWeight.MN.max, 2, 1))) +
geom_text(aes(x = Inf,
y = Inf,
label = sprintf("\n\nsd = %4.1f", dWeight.SD),
hjust = 1,
vjust = 1,
# bold if sd == sd minimum
fontface = ifelse(dWeight.SD == dWeight.SD.min, 2, 1))) +
theme_gray()
Run Code Online (Sandbox Code Playgroud)
用fontface =你可以使你的geom_text() 斜体或粗体。表达式中的ifelse()会检查该值是否等于全局最大值/最小值,= 2如果为 true,则将文本设置为粗体 ( );如果为 false,则将其保留为普通文本 ( = 1)。
| 归档时间: |
|
| 查看次数: |
4925 次 |
| 最近记录: |