2014-10-14 3 views
12

Ich habe einen Barplot mit ggplot2 gemacht und das Journal, das ich vorlegen muss erfordert, dass die Achse ticks nach innen gerichtet.Wie mache ich meine Achse ticks Gesicht nach innen in ggplot2

Dies ist die Textdarstellung meiner Daten (dput)

Mean.Inc.melt<-structure(list(Var1 = structure(c(1L, 2L, 1L, 2L, 1L, 2L), .Label = c("Harvest","Pre-Harvest"), class = "factor"), Var2 = structure(c(1L, 1L, 2L, 2L, 3L, 3L), .Label =c("Dip A", "Trip A", "Trip B"), class = "factor"), value = c(2, 34, 1, 36, 3, 46)), .Names =c("Var1", "Var2", "value"), row.names = c(NA, -6L), class = "data.frame") 

Einschließlich der Standardfehler

SEM.Inc.melt<-structure(list(Var1 = structure(c(1L, 2L, 1L, 2L, 1L, 2L), .Label = c("Harvest", "Pre-Harvest"), class = "factor"), Var2 = structure(c(1L, 1L, 2L, 2L, 3L, 3L), .Label = c("Dip A", "Trip A", "Trip B"), class = "factor"), value = c(1, 12, 1, 2, 1, 6)), .Names = c("Var1", "Var2", "value"), row.names = c(NA, -6L), class = "data.frame") 

Dies ist das Skript, das ich bisher verwendet haben, um den Plot zu erstellen:

ggplot(Mean.Inc.melt,aes(x=Var2,y=value,fill=Var1))+ 
    geom_bar(stat='identity',position=position_dodge(),colour='black')+ 
    scale_fill_manual(values=c('#000000','#FFFFFF'))+ 
    geom_errorbar(aes(ymin=Mean.Inc.melt$value-SEM.Inc.melt$value, 
        ymax=Mean.Inc.melt$value+SEM.Inc.melt$value),width=.1, 
        position=position_dodge(.9))+ 
    xlab('Treatment')+ 
    ylab('Percentage Incidence (%)')+ 
    ylim(0,60)+ 
    scale_y_continuous(expand=c(0,0),limits=c(0,60))+ 
    scale_x_discrete(expand=c(0,0))+ 
    theme_bw()+ 
    theme(axis.line=element_line(colour='black'),panel.grid.major=element_blank(), 
     panel.grid.minor=element_blank(),panel.border=element_blank(), 
     panel.background=element_blank())+ 
    geom_vline(xintercept=0)+theme(legend.position='none') 

Ich denke, der Punkt ist - weiß jemand, ob es eine Möglichkeit gibt, dass ich meine Achse nach innen bekommen kann?

Antwort

10

Während ich nicht verstehe Zeitschriften Wunsch, Häkchen auf der Innenseite haben, ist es ganz einfach, dies mit ggplot zu erreichen.

Mit dem Argument axis.ticks.length bis theme können Sie die Länge der Teilstriche festlegen. Wenn dies auf einen negativen Wert eingestellt ist, werden Teilstriche nach innen geplottet. Zum Beispiel (reposting eine Lösung von Dennis Murphy here):

library(ggplot2) 
library(grid) 
ggplot(mtcars, aes(disp, mpg)) + geom_point() + 
    theme(axis.ticks.length=unit(-0.25, "cm"), axis.ticks.margin=unit(0.5, "cm")) 

enter image description here

Wie im Beispiel oben, müssen Sie auch die Positionierung der Zecke Etiketten einstellen, mit axis.ticks.margin.

Beachten Sie, dass der Wert als unit Objekt übergeben werden soll, das erfordert, dass das grid-Paket (vorinstalliert mit R) geladen wird.

+1

In ggplot 2.0.0 mit einer 'Warnmeldung: 'axis.ticks.margin' ist veraltet. Bitte setze 'margin' -Eigenschaft von 'axis.text' anstatt '- und es scheint 'axis.text = element_text (margin = 5)' hilft nicht ... Ich poste zurück, wenn die Lösungen googlen. – xealits

+2

Also, nach der test-und-try-Methode, so machen Sie es jetzt: 'theme (axis.ticks.length = Einheit (-0.25," cm "), axis.text.x = element_text (margin = unit (c (0.5,0.5,0.5,0.5), "cm")), axis.text.y = element_text (Rand = Einheit (c (0.5,0.5,0.5,0.5), "cm"))) - irgendwie erbte es nicht die Einstellung von "axis.text", und die Fehlermeldung fordert, dass Marge ein Vektor der Längen 4 ist. – xealits

+0

@xealits - danke für das Posten der Korrektur. – jbaums