If it is necessary to swap the R plot axis, try to do that with the x and y arguments. Package ggplot2 allows you to swap the axis by using coord_flip, but it is mostly unnecessary. Try to fix the problem at the beginning.
Swapping the ggplot2 axis might be useful to deal with lengthy text, and that is a good reason to do that.
Here is my dataset with the world’s major landmasses in thousands of square miles.
x <- as.data.frame(islands) x <- data.frame("landmass" = rownames(x), "area" = x$islands) head(x) # landmass area # 1 Africa 11506 # 2 Antarctica 5500 # 3 Asia 16988 # 4 Australia 2968 # 5 Axel Heiberg 16 # 6 Baffin 184
It is necessary to get landmass names ordered on the axis. To visualize only the biggest ones, I selected only the top 10 by using the dplyr functionality.
require(dplyr) x <- x %>% arrange(desc(area)) %>% slice_max(area, n = 10) %>% mutate("landmass" = factor(landmass, levels = landmass))
In the column chart, the results look like this. X-axis labels are overlapping, and it is necessary to make some adjustments.
require(ggplot2) x %>% ggplot(aes(x = landmass, y = area)) + geom_col(fill = "#BE3455") + ylab("area, mi² (in thousands)") + theme_minimal() + theme(panel.grid = element_blank())
Swap R plot axis in ggplot2
As I mentioned earlier, flipping the R plot axis might be useful to deal with lengthy text. Here the solution is to swap x and y arguments inside the aes.
x %>% ggplot(aes(x = area, y = landmass)) + geom_col(fill = "#BE3455") + xlab("area, mi² (in thousands)") + theme_minimal() + theme(panel.grid = element_blank())
If you want to order the R plot bars differently, here is how to do that. In this scenario, there are categorical values as factors. Otherwise, you can use the scale_x_reverse from ggplot2.
x %>% ggplot(aes(x = area, y = landmass)) + geom_col(fill = "#BE3455") + xlab("area, mi² (in thousands)") + scale_y_discrete(limits = rev(levels(x$landmass))) + theme_minimal() + theme(panel.grid = element_blank())
Swap R plot axis with coord_flip from ggplot2
The option to use coord_flip from ggplot2 is useful in a visualization like a histogram when you don’t specify x and y separately.
airquality %>% ggplot(aes(Temp)) + geom_histogram() + theme_minimal()
airquality %>% ggplot(aes(Temp)) + geom_histogram() + coord_flip() + theme_minimal()
Rotate ggplot2 axis labels
If you want to show categories on the x-axis, there is another thing you can do to avoid overlapping labels. Try to rotate axis labels in ggplot2 like this.
x %>% ggplot(aes(x = landmass, y = area)) + geom_col(fill = "#BE3455") + ylab("area, mi² (in thousands)") + scale_x_discrete(guide = guide_axis(angle = 90)) + theme_minimal() + theme(panel.grid = element_blank())
Another way to rotate x-axis labels is by using theme components.
x %>% ggplot(aes(x = landmass, y = area)) + geom_col(fill = "#BE3455") + ylab("area, mi² (in thousands)") + theme_minimal() + theme(axis.text.x = element_text(angle = 90), panel.grid = element_blank())
Adjust the positioning of the x-axis labels to get them closer to the axis.
x %>% ggplot(aes(x = landmass, y = area)) + geom_col(fill = "#BE3455") + ylab("area, mi² (in thousands)") + theme_minimal() + theme(axis.text.x = element_text( angle = 90, vjust = 0.5, hjust = 1.1 ), panel.grid = element_blank())
If you want to add data labels R plot, then here is a helpful post from this blog.
Leave a Reply