2012-12-14 13 views
5

Zrobiłem doubleYScale działki:Zmiana rozmiaru tekstu oś y z doubleYScale działki

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

problem jest to, że nie mogę się zmienić rozmiar tekstu etykiet Y axic (y i y^2 tekst, chcę go powiększyć). To żaden problem, aby go zmienić, jeśli tylko wykreślić obj1 lub obj2 osobno, ale to nie działa dla doubleYScale ...

Mogę natomiast zmienić wielkość cyfr na Y axices z:

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

Wszelkie sugestie? Nie mogę znaleźć sposobu :(

Odpowiedz

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

Jeśli chcesz ustawić inną oś rozmiarach

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

Dzięki, niezła! Przyjmę twoją odpowiedź, ponieważ nie znałem rozwiązania sieciowego! :) Ale czy jest jakiś sposób na kratownicę, czy wiesz? – user1665355

+0

Dodałem rozwiązanie poniżej bez użycia 'siatki'. Zdaję sobie sprawę, że to pytanie zadano ponad dwa lata temu, ale może być pomocne dla osób szukających rozwiązania ... – sparrow

+0

@sparrow +1! ale to nie więcej niż 2 lata temu (1 rok i kilka miesięcy) :) Tak pomocne, ale generalnie podwójna oś nie jest polecana, ponieważ nie jest bardzo czytelna. – agstudy

3

Nie odpowiada to bezpośrednio na twoje pytanie, ale mieszanie dwóch działek o różnej wielkości na jednej osi może nie być najlepszym podejściem, ponieważ może wprowadzać w błąd. ggplot by wykonać zadanie równie dobrze lub lepiej? Wszystkie poniższe elementy są łatwo regulować.

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

dzięki! Wiem ... Ale mój pracownik chce mieć fabułę z dwiema osiami, więc ... :) Ale czy istnieje rozwiązanie z kratką, czy nie, czy wiesz? Pozdrawiam – user1665355

+0

Korzystanie z sieci, Extra Nie wiem, ale druga odpowiedź za pomocą siatki wygląda na użyteczną – SlowLearner

+0

Tak, dziękuję! Dzięki za odpowiedź jeszcze raz, powiedziałem też pracownikowi, że ggplot jest lepszy, ale ... Miłego wieczoru! – user1665355

4

Oto kolejny rozwiązanie bezpośrednio z lattice i latticeExtra: gdzie można ustawić wielkość wszystkich etykiet osi niezależnie:

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