Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I rotate and center the y-axis title using ggplot2?

Tags:

r

ggplot2

I'm trying to rotate the y-axis title of my ggplot2 graph as well as center it on the y-axis. I have been able to successfully rotate the title, but I can't seem to center it on the y-axis, even when I use the hjust = 0.5 command. Are there any ideas how to center the title on the y-axis once it's been rotated?

dataset <- data.frame(cultivar = c('var1',
                                   'var1',
                                   'var1',
                                   'var1',
                                   'var3',
                                   'var3',
                                   'var3',
                                   'var3',
                                   'var2',
                                   'var2',
                                   'var2',
                                   'var2',
                                   'var3',
                                   'var3',
                                   'var1',
                                   'var2',
                                   'var2',
                                   'var2',
                                   'var1',
                                   'var2',
                                   'var3',
                                   'var3',
                                   'var1',
                                   'var1',
                                   'var1',
                                   'var3',
                                   'var3',
                                   'var1',
                                   'var2',
                                   'var2',
                                   'var2',
                                   'var2',
                                   'var3',
                                   'var1',
                                   'var3',
                                   'var1'),
                      rate = c(10,
                               20,
                               30,
                               40,
                               10,
                               20,
                               30,
                               40,
                               10,
                               20,
                               30,
                               40,
                               20,
                               40,
                               10,
                               10,
                               30,
                               20,
                               30,
                               40,
                               10,
                               30,
                               40,
                               20,
                               20,
                               10,
                               30,
                               30,
                               40,
                               10,
                               30,
                               20,
                               40,
                               10,
                               20,
                               40),
                      vi = c(1354,
                             1307,
                             1529,
                             1380,
                             1416,
                             1342,
                             1419,
                             1363,
                             1282,
                             1287,
                             1202,
                             1312,
                             1294,
                             1248,
                             1431,
                             1421,
                             1287,
                             1439,
                             1405,
                             1406,
                             1395,
                             1540,
                             1222,
                             1247,
                             1375,
                             1235,
                             1436,
                             1335,
                             1478,
                             1356,
                             1542,
                             1219,
                             1392,
                             1406,
                             1524,
                             1342))

Code for generating the graph:

#Aggregate data frame
datasetMean <- aggregate.data.frame(dataset, by=list(dataset$cultivar, dataset$rate), mean)
datasetMean <- select(datasetMean, Group.1, Group.2, vi)
colnames(datasetMean) <- c("cultivar","rate","vi")

#Generate graph
ggplot(datasetMean, aes(x = cultivar, y = vi, fill=factor(rate)))+
  geom_bar(stat="identity", width = 0.6, position = "dodge", col = "black")+
  scale_fill_discrete(name = "Rate", labels = c("0X","1X","4X","8X"))+
  xlab("Cultivar") + ylab("vi")+
  ggtitle("VI Scores")+
  theme(plot.title = element_text(hjust = 0.5, size = 30),
        strip.text.x = element_text(size = 25),
        axis.text = element_text(size = 20),
        axis.title = element_text(size = 25),
        legend.key.size = unit(1.5, "cm"),
        legend.text = element_text(size = 15),
        legend.title = element_text(size = 20),
        axis.title.y = element_text(angle = 0, hjust = 0.5))
like image 369
sneeze_shiny Avatar asked Oct 14 '25 12:10

sneeze_shiny


1 Answers

If you want to move the axis title vertically, you need to use vjust rather than hjust as it's vertical relative to the figure panel.

Adding axis.title.y = element_text(angle = 0, vjust = 0.5) to your theme() call should do it.

like image 187
SDS0 Avatar answered Oct 18 '25 02:10

SDS0



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!