Comment afficher uniquement des valeurs entières sur un axe en utilisant ggplot2

J’ai l’insortinggue suivante:

library(reshape) library(ggplot2) library(gridExtra) require(ggplot2) data2<-structure(list(IR = structure(c(4L, 3L, 2L, 1L, 4L, 3L, 2L, 1L ), .Label = c("0.13-0.16", "0.17-0.23", "0.24-0.27", "0.28-1" ), class = "factor"), variable = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("Real queens", "Simulated individuals" ), class = "factor"), value = c(15L, 11L, 29L, 42L, 0L, 5L, 21L, 22L), Legend = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("Real queens", "Simulated individuals"), class = "factor")), .Names = c("IR", "variable", "value", "Legend"), row.names = c(NA, -8L), class = "data.frame") p <- ggplot(data2, aes(x =factor(IR), y = value, fill = Legend, width=.15)) data3<-structure(list(IR = structure(c(4L, 3L, 2L, 1L, 4L, 3L, 2L, 1L ), .Label = c("0.13-0.16", "0.17-0.23", "0.24-0.27", "0.28-1" ), class = "factor"), variable = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("Real queens", "Simulated individuals" ), class = "factor"), value = c(2L, 2L, 6L, 10L, 0L, 1L, 4L, 4L), Legend = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("Real queens", "Simulated individuals"), class = "factor")), .Names = c("IR", "variable", "value", "Legend"), row.names = c(NA, -8L), class = "data.frame") q<- ggplot(data3, aes(x =factor(IR), y = value, fill = Legend, width=.15)) ##the plot## q + geom_bar(position='dodge', colour='black') + ylab('Frequency') + xlab('IR')+scale_fill_grey() +theme(axis.text.x=element_text(colour="black"), axis.text.y=element_text(colour="Black"))+ opts(title='', panel.grid.major = theme_blank(),panel.grid.minor = theme_blank(),panel.border = theme_blank(),panel.background = theme_blank(), axis.ticks.x = theme_blank()) 

Je veux que l’axe des y affiche uniquement des nombres entiers. Que ce soit accompli par l’arrondissement ou par une méthode plus élégante, ce n’est pas vraiment important pour moi.

Avec scale_y_continuous() et les breaks= argument breaks= vous pouvez définir les points de rupture pour l’axe y sur des entiers que vous souhaitez afficher.

 ggplot(data2, aes(x =factor(IR), y = value, fill = Legend, width=.15)) + geom_bar(position='dodge', colour='black')+ scale_y_continuous(breaks=c(1,3,7,10)) 

Si vous avez le paquet scales , vous pouvez utiliser pretty_breaks() sans avoir à spécifier manuellement les ruptures.

 q + geom_bar(position='dodge', colour='black') + scale_y_continuous(breaks= pretty_breaks()) 

C’est ce que j’utilise:

 library(scales) ggplot(data2, aes(x = factor(IR), y = value, fill = Legend, width = .15)) + geom_bar(position = 'dodge', colour = 'black') + scale_y_continuous(breaks = function(x) unique(floor(pretty(seq(0, (max(x) + 1) * 1.1))))) 

Vous pouvez utiliser une étiqueteuse personnalisée. Par exemple, cette fonction garantit de ne produire que des sauts d’entier:

 int_breaks <- function(x, n = 5) pretty(x, n)[pretty(x, n) %% 1 == 0] 

Utilisé comme

 + scale_y_continuous(breaks = int_breaks) 

Une autre option consiste à contrôler le formatage des étiquettes avec un formateur personnalisé.

 q + geom_bar(position='dodge', colour='black')+ scale_y_continuous(labels = function (x) floor(x)) 

Voir les scales pour les autres formateurs populaires, tels que percent , dollar , …