2013-03-25 17 views
35

Mam następujące działki:Jak wyświetlić tylko wartości całkowite na osi używając ggplot2

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

chcę osi Y, aby wyświetlać tylko liczby całkowite. Niezależnie od tego, czy odbywa się to za pomocą zaokrąglania, czy też poprzez bardziej elegancką metodę, nie jest to dla mnie ważne.

+2

Pan spojrzał na dowolnej funkcji skalę w ogóle? 'scale_y_continuous' maybe? – joran

+0

Przeczytałem kilka odpowiedzi na podobne pytania i miałem wrażenie, że scale_y_continuous konwertowane z innych formatów liczbowych (np. Notacja naukowa), ale nie uwzględniało konwersji liczby rzeczywistej na liczbę całkowitą, której szukałem. Mogę się pomylić ... – Atticus29

Odpowiedz

26

Z scale_y_continuous() i argumentem breaks= można ustawić punkty łamania dla osi y na liczby całkowite, które mają być wyświetlane.

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

Inną opcją jest, aby kontrolować formatowanie etykiet z niestandardowym formater

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

Zobacz scales pakiety dla innych popularnych programów formatujących jak percent, dollar ...

+9

To nie działa. Transformuje etykietę na przykład od 7,5 do 7, ale znacznik pozostaje na poziomie 7,5, co jest błędne. – user7610

+0

Miałem pęczek wartości od 0 do 1 i zamiast tylko 0 i 1 mam 0 0 0 0 1 1 – kory

24

Jeśli masz pakiet scales, można użyć pretty_breaks() bez konieczności ręcznego określania przerw.

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

To wydawało się robić prawie to, co robi domyślna metoda i nadal miałem przecinki dziesiętne w przerwach. – kory

4

To co mam użyć:

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

Dzięki, wydaje się, że wyniki są zgodne z oczekiwaniami. – kory

5

Można użyć niestandardowego drukarki etykiet. Na przykład, funkcja ta gwarantuje produkować tylko przerwy integer:

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

użyć jako

+ scale_y_continuous(breaks = int_breaks) 
+0

To powoduje utratę liczby całkowitej 1, jeśli masz dane tylko od 0 do 1,25 lub co masz. Widzę tylko 0 na osi X. – kory

Powiązane problemy