'How to change a continuous x-axis into a discrete one in ggplot?
I have the following dataframe:
df = structure(list(qCountry = c("AT", "DE", "ES", "FI", "FR", "GR",
"HU", "IR", "IT", "LV", "NL", "POL", "PT", "RO", "SWE"), Mean = c(1.34199395770393,
1.37664132688321, 1.29144095341278, 1.42088404868674, 1.45019920318725,
1.29786200194363, 1.24528301886792, 1.26937046004843, 1.38345864661654,
1.39706780696396, 1.38751714677641, 1.30804248861912, 1.28609062170706,
1.2320819112628, 1.32588699080158), Sd = c(0.474520963779525,
0.484711259139164, 0.454549282145671, 0.493859200850428, 0.497678958439859,
0.45742966912063, 0.430377930416405, 0.443767080631815, 0.48638085640142,
0.489439780963027, 0.487350499450418, 0.461801022550429, 0.452051373271304,
0.422281105345888, 0.468859354590332)), class = c("tbl_df", "tbl",
"data.frame"), row.names = c(NA, -15L))
I would like to plot it combining geom_point and geom_errorbar. This is not a problem. However, the x-axis is a continuous variable, while I would like ggplot to display only two labels "Yes" and "No" in correspondence of 1 and 2. I tried the following but it doesn't work:
df %>% ggplot(aes(x = reorder(qCountry,-Mean), y = Mean, group = qCountry)) + geom_point(size = 3.5) +
geom_errorbar(aes(ymin=Mean-Sd, ymax=Mean+Sd)) + labs(title = "Some Title",x = "", y="") + scale_y_discrete(labels= c("Yes", "No")) + coord_flip() + theme_classic2()
Can anyone help me?
Thanks!
Solution 1:[1]
You can't have a discrete axis. But you can relabel a continuous axis so that 1 is "No" and 2 is "Yes"
df %>%
ggplot(aes(x = reorder(qCountry,-Mean), y = Mean, group = qCountry)) +
geom_point(size = 3.5) +
geom_errorbar(aes(ymin=Mean-Sd, ymax=Mean+Sd)) +
labs(title = "Some Title",x = "", y="") +
scale_y_continuous(breaks = c(1, 2),
labels = c("No", "Yes"), limits = c(0.8, 2)) +
coord_flip() +
theme_classic(base_size = 20)
As a word of caution, you might want to look at how you are calculating the standard deviations, since your error bars are stretching below 1, which doesn't really make sense. You might want to work out binomial confidence intervals instead.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |

