Reputation: 53
I have a violin plot just how I like except I would like to change the tick and axis labels. I tried a few different variations (the last being below). I feel like I'm just a comma or a plus sign. I would like the y axis to be "SR Observed", x axis labels to be "Forest Type", and x-axis tick label to be "Bear Oak" and "Oak-Hickory". Most of the solutions involve packages other than ggplot2 but I'd like to see the solution within ggplot2.
Thanks so much!
Jeff
geom_violin()
# p + scale_x_discrete(breaks=c("bear.oak", "oak.hickory"),
# labels=c("Bear Oak", "Oak-Hickory"))
p + stat_summary(fun.y=median, geom="point", size=2, color="red")```
structure(list(forest.type = c("bear.oak", "bear.oak", "bear.oak",
"bear.oak", "bear.oak", "bear.oak", "bear.oak", "bear.oak", "bear.oak",
"bear.oak", "bear.oak", "bear.oak", "bear.oak", "bear.oak", "bear.oak",
"bear.oak", "bear.oak", "bear.oak", "bear.oak", "bear.oak", "bear.oak",
"bear.oak", "bear.oak", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "bear.oak",
"bear.oak", "bear.oak", "bear.oak", "bear.oak", "bear.oak", "bear.oak",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"bear.oak", "bear.oak", "bear.oak", "bear.oak", "bear.oak", "bear.oak",
"bear.oak", "bear.oak", "bear.oak", "bear.oak", "bear.oak", "bear.oak",
"bear.oak", "bear.oak", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory", "oak.hickory",
"oak.hickory", "oak.hickory"), S.obs = c(13, 9, 9, 5.5, 10, 6,
8, 9.333333333, 9, 9, 11, 8, 9, 9, 10, 11, 8.333333333, 7.5,
6, 13, 12.5, 9, 9.5, 9, 7, 7, 8, 9, 8, 6, 9, 6, 3, 2, 2, 2, 4,
3, 11, 5.8, 5.4, 6.4, 6.6, 5, 11, 10, 9.333333333, 6, 10, 10,
9, 7, 7, 5, 10, 11, 13, 5, 7, 8, 7, 9, 7, 8, 8, 11, 11.5, 16.5,
4, 7, 6, 5.5, 5, 7, 7, 13, 16, 7, 11, 8.5, 11, 12, 12, 14, 11,
11, 6, 8.5, 4, 10, 7, 6, 7, 11, 5, 5, 8, 7, 11.5, 10, 8, 5, 9,
6, 8, 5.5, 7, 4.5, 7, 7, 6.5, 7.5, 5.5, 5, 7.5, 9.5, 6, 8, 5.5,
9.25, 3.666666667, 5.5, 7.5, 6.5, 6, 8, 6, 13, 14, 14.5, 10.33333333,
10, 6, 5, 9, 8)), class = "data.frame", row.names = c(NA, -136L
))
Upvotes: 0
Views: 2304
Reputation: 12478
Assuming the data above is saved as df
, I would recommend to first recode your levels using forcats::fct_recode
. You can set the axis labels using labs()
:
library(tidyverse)
df |>
mutate(forest_type = fct_recode(forest.type,
"Bear Oak" = "bear.oak",
"Oak-Hickory" = "oak.hickory")) |>
ggplot(aes(x = forest_type, y = S.obs)) +
geom_violin() +
labs(x = "Forest Type", y = "SR Observed")
Created on 2022-08-23 by the reprex package (v2.0.1)
Following @yacine-hajji approach, you could also just set manual labels for the levels in the plot instead of changing the data:
ggplot(df, aes(x = forest.type, y = S.obs)) +
geom_violin() +
scale_x_discrete(labels = c("bear.oak" = "Bear Oak",
"oak.hickory" = "Oak-Hickory"))
Upvotes: 2