Reputation: 874
I'm plotting some X values with mean_cl_boot
with large confidence intervals
How can I export the text for both the value of the fun.y = mean
and fun.data = mean_cl_boot
in each group?
I have an interval of values in mean_cl_boot
, and I would like to plot them and export them.
ggplot(iris, aes(x = Species, y = Petal.Length)) +
geom_jitter(width = 0.5) + stat_summary(fun.y = mean, geom = "point", color = "red") +
stat_summary(fun.data = mean_cl_boot, fun.args=(conf.int=0.9999), geom = "errorbar", width = 0.4)
I got to plot the mean (fun.y = mean
) value, with:
stat_summary(fun.y=mean, geom="text", aes(label=sprintf("%1.1f", ..y..)),size=3, show.legend=FALSE
But I can't to the same with mean_cl_boot
.
Upvotes: 3
Views: 2162
Reputation: 83275
You can get access to the data of stat_summary
with ggplot_build
.
First, store your ggplot call in an object:
g <- ggplot(iris, aes(x = Species, y = Petal.Length)) +
geom_jitter(width = 0.5) +
stat_summary(fun.y = mean, geom = "point", color = "red") +
stat_summary(fun.data = mean_cl_boot, fun.args=(conf.int=0.9999), geom = "errorbar", width = 0.4)
Then, with:
ggplot_build(g)$data[[3]]
You get the values calculated with mean_cl_boot
:
x group y ymin ymax PANEL xmin xmax colour size linetype width alpha 1 1 1 1.462 1.386000 1.543501 1 0.8 1.2 black 0.5 1 0.4 NA 2 2 2 4.260 4.024899 4.462202 1 1.8 2.2 black 0.5 1 0.4 NA 3 3 3 5.552 5.337199 5.798202 1 2.8 3.2 black 0.5 1 0.4 NA
For getting the labels right, you could do:
# extract the data
mcb <- ggplot_build(g)$data[[3]]
# add the labels to the plot
g + geom_text(data = mcb,
aes(x = group, y = ymin, label = round(ymin,2)),
color = "blue",
vjust = 1)
the result:
But probably an even better alternative is using the ggrepel package:
library(ggrepel)
g + geom_label_repel(data = mcb,
aes(x = group, y = ymin, label = round(ymin,2)),
color = "blue",
nudge_x = 0.2,
nudge_y = -0.2)
the result of that:
Upvotes: 6