2014-10-14 12 views
12

Tôi đã tạo một thanh cốt thép bằng ggplot2 và Nhật ký tôi cần gửi để yêu cầu trục đánh dấu vào trong.Làm cách nào để làm cho các trục của mình quay mặt vào trong trong ggplot2

Đây là đại diện văn bản của dữ liệu của tôi (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") 

Bao gồm sai số chuẩn

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

Đây là kịch bản tôi đã sử dụng cho đến nay để tạo ra cốt truyện:

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

Tôi đoán vấn đề là - có ai biết nếu có cách nào tôi có thể khiến trục của tôi phải đối mặt vào trong không?

Trả lời

10

Mặc dù tôi không hiểu mong muốn của các tạp chí trong việc đánh dấu vào bên trong, nhưng việc thực hiện điều này là khá đơn giản với ggplot.

Đối số axis.ticks.length cho theme cho phép bạn đặt độ dài dấu tick. Nếu giá trị này được đặt thành giá trị âm, dấu tick sẽ được vẽ vào bên trong. Ví dụ (reposting một giải pháp bởi 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

Như trong ví dụ trên, bạn cần phải điều chỉnh vị trí của các nhãn đánh dấu là tốt, với axis.ticks.margin.

Lưu ý rằng giá trị phải được chuyển thành đối tượng unit, yêu cầu gói grid (được cài đặt sẵn với R) được tải.

+1

Trong ggplot 2.0.0 có 'Thông báo cảnh báo: 'axis.ticks.margin' không được dùng nữa. Vui lòng đặt thuộc tính 'margin' của 'axis.text' thay thế' - và có vẻ như 'axis.text = element_text (margin = 5)' không trợ giúp ... Tôi sẽ đăng lại nếu các giải pháp googles up. – xealits

+2

Vì vậy, theo phương pháp thử và thử, đây là cách bạn làm điều đó ngay bây giờ: 'theme (axis.ticks.length = unit (-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 (margin = đơn vị (c (0,5,0,5,0,5,0,5), "cm"))) '- bằng cách nào đó nó không kế thừa thiết lập từ 'axis.text', và thông báo lỗi nhắc lề là một vectơ có độ dài 4. – xealits

+0

@xealits - cảm ơn bạn đã đăng chỉnh sửa. – jbaums

Các vấn đề liên quan