2012-12-14 38 views
5

tôi đã thực hiện một âm mưu doubleYScale:Thay đổi kích thước văn bản trục y với doubleYScale cốt truyện

library(lattice) 
library(latticeExtra) 

# Some data 
foo <- list(x = 1:100, y = cumsum(rnorm(100))) 

obj1 <- xyplot(y~ x, data=foo,xlab=list(cex=1.2), 
       main="TOtalProduktion VS SummaSkulder/TotaltKapital i procent", 
       type = c("l","g"),col="black", 
       lty=1,key = simpleKey(col=c('black'), 
       text=c("Produktion"),cex=1.2,points=FALSE, lines=TRUE), 
       scales=list(x=list(rot=90,tick.number=25, 
       cex=1,axs="r"))) 

obj2 <- xyplot(y^2 ~ x,data= foo ,type = "o",col="black", 
       lty=9,key = simpleKey(col=c('black'), 
       text=c("Summa.skulder"),cex=1.2,lines=FALSE,points= TRUE)) 

doubleYScale(obj1, obj2, add.ylab2 = TRUE) 

enter image description here

Các problem là tôi không thể quản lý để thay đổi kích thước văn bản của các nhãn y axic (yy^2 văn bản, tôi muốn làm cho nó lớn hơn). Đó là không có vấn đề để thay đổi nó nếu tôi chỉ vẽ obj1 hoặc obj2 riêng biệt, nhưng nó không làm việc cho doubleYScale ...

tôi có thể mặt khác thay đổi kích thước của con số trên y-axices với:

trellis.par.set(axis.text=list(cex=1)) 

Mọi đề xuất? Tôi không thể quản lý để tìm cách: (

Trả lời

3
library(grid) 
    ## the text size of the 2 y-axic labels 
    grid.edit(gPath='GRID.text',grep=T,global=T,gp =gpar(cex=3)) 

Nếu bạn muốn thiết lập trục khác nhau kích thước

grobs <- sapply(grid.get(gPath='GRID.text',grep=T,global=T),'[')['name',] 
    grid.edit(gPath=grobs[[1]],gp =gpar(cex=2)) 
    grid.edit(gPath=grobs[[2]],gp =gpar(cex=1.5)) 

enter image description here

+0

Cảm ơn, tốt đẹp nhất! Gonna chấp nhận câu trả lời của bạn bởi vì tôi không biết giải pháp lưới! :) Nhưng có cách nào với latticeExtra, bạn có biết? – user1665355

+0

Tôi đã thêm một giải pháp bên dưới mà không sử dụng 'lưới'. Tôi nhận ra câu hỏi này đã được hỏi hơn hai năm trước, nhưng nó có thể hữu ích cho những người khác tìm kiếm một giải pháp ... – sparrow

+0

@sparrow +1! nhưng nó không phải là hơn 2 năm trước (1 năm và vài tháng) :) Có hữu ích nhưng nói chung đôi trục không được khuyến khích vì nó không phải là rất dễ đọc. – agstudy

3

Điều này không trực tiếp trả lời câu hỏi của bạn, nhưng trộn hai ô có kích thước khác nhau trên một trục có thể không phải là cách tốt nhất vì nó có thể gây nhầm lẫn. ggplot sẽ thực hiện công việc cũng hay tốt hơn? Tất cả những yếu tố dưới đây có thể dễ dàng điều chỉnh.

faceted plot

library(ggplot2) 
library(reshape) 

set.seed(123) 
foo <- list(x = 1:100, y = cumsum(rnorm(100))) 

foo <- as.data.frame(foo) 
foo$z <- foo$y^2 
mymelt <- melt(foo, id.var = 'x') 
mymelt$label <- ifelse(mymelt$variable == 'y', "Produktion", "Summa.skulder") 
mymelt$line.colour <- ifelse(mymelt$variable == 'y', "red", "blue") # specify colours here 

ggplot(data = mymelt, aes(x = x, y = value)) + 
    geom_line(aes(colour = mymelt$line.colour)) + 
    facet_wrap(~ label, ncol = 1, scales = "free_y") + 
    scale_colour_manual(values = unique(mymelt$line.colour)) + 
    ggtitle("TOtalProduktion VS SummaSkulder/TotaltKapital i procent") + 
    theme(strip.text.x = element_text(size = 12)) + 
    theme(axis.text.x = element_text(size = 9)) + 
    theme(axis.text.y = element_text(size = 9)) + 
    theme(axis.title.x = element_text(size = 15)) + 
    theme(axis.title.y = element_text(size = 15)) + 
    theme(axis.title.x = element_blank()) + # comment out this line if you want an x axis title 
    theme(axis.title.y = element_blank()) + # comment out this line if you want a y axis title 
    theme(legend.position = "none") 
+0

cảm ơn! Tôi biết ... Nhưng nhân viên của tôi muốn có một cốt truyện hai trục vì vậy .. :) Nhưng có một giải pháp với latticeExtra hay không, bạn có biết? Trân trọng – user1665355

+0

Sử dụng lưới, Thêm Tôi không biết, nhưng câu trả lời khác sử dụng lưới có vẻ hữu ích – SlowLearner

+0

Có, cảm ơn! Cảm ơn câu trả lời một lần nữa, tôi cũng đã nói với nhân viên rằng ggplot là tốt hơn, nhưng ... Chúc một buổi tối tốt đẹp! – user1665355

4

Dưới đây là một giải pháp trực tiếp với latticelatticeExtra: nơi bạn có thể thiết lập kích thước của tất cả các nhãn trục độc lập:

library(lattice) 
library(latticeExtra) 
foo <- list(x = 1:100, y = cumsum(rnorm(100))) 

obj1 <- xyplot(y~ x, data=foo, 
       xlab=list("Thing", fontsize = 22), 
       ylab = list("Something", fontsize = 32), 
       ylab.right = list("Anything", fontsize = 16), 
       par.settings = simpleTheme(col = 1), 
       type = c("l","g"), 
       lty=1, 
       scales=list(x=list(rot=90,tick.number=25, 
            cex=1,axs="r"))) 

obj2 <- xyplot(y^2 ~ x,data= foo ,type = "o",col="black", 
       lty=9) 

doubleYScale(obj1, obj2) 

enter image description here

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