Search code examples
rggplot2exportpng

How to increase ggplot2 legend size for exporting graph as png?


I'm trying to export a graph I made for a presentation comparing the average response of plants to differing fertilizer treatments. I am using the R png function for exporting the image, and I need it to be the size that is defined in the code below. The only thing I don't know how to do is to increase the legend size so that it appears larger, like the rest of the graph. How can I do this?

Data:

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 to generate 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 and export graph as png
png("scores.png", width = 1000, height = 700)

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("10","20","30","40"))+
  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))

dev.off()

Solution

  • Thanks to the comments above, I updated my code with the legend.key.size, legend.text, and legend.title additions, and it produced exactly what I needed.

    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))