2017-07-07 11 views
12

Korzystanie autoplot z ggfortify tworzyć wykresy diagnostyczne:Zmiana tytuły osi dla autoplot

library(ggplot2) 
library(ggfortify) 

mod <- lm(Petal.Width ~ Petal.Length, data = iris) 
autoplot(mod, label.size = 3) 

czy jest możliwe (łatwo) zmiana osi i wykreślić tytuły? Chciałbym je przetłumaczyć.

enter image description here

Odpowiedz

5

Funkcja autoplot.lm zwraca obiekt S4 (klasa ggmultiplot, patrz ?`ggmultiplot-class`). Jeśli spojrzysz na plik pomocy, zobaczysz, że mają metody zastępcze dla poszczególnych działek. Oznacza to, że możesz wyodrębnić pojedynczy wykres, zmodyfikować go i odłożyć. Na przykład:

library(ggplot2) 
library(ggfortify) 

mod <- lm(Petal.Width ~ Petal.Length, data = iris) 
g <- autoplot(mod, label.size = 3) # store the ggmultiplot object 

# new x and y labels 
xLabs <- yLabs <- c("a", "b", "c", "d") 

# loop over all plots and modify each individually 
for (i in 1:4) 
    g[i] <- g[i] + xlab(xLabs[i]) + ylab(yLabs[i]) 

# display the new plot 
print(g) 

Here I tylko zmodyfikowany etykiety osi, ale trzeba zmienić coś o działkach pojedynczo (Motywy, kolory, tytuły, rozmiary).

3
library(ggplot2) 
library(ggfortify) 

mod <- lm(Petal.Width ~ Petal.Length, data = iris) 
autoplot(mod,which=c(1:6), ncols=2) #total 6 plots in two columns 
#change axes label & title of plot 1. similarly by changing 'which' parameters count you can label other plots. 
autoplot(mod,which=1) + 
    labs(x="x-axis label of fig1", y="y-axis label of fig1", title="Fig1 plot") 

Prosimy nie zapomnij dać nam znać, czy to pomogło :)

+0

Działa to dobrze dla jednej działce, ale jak każda działka musi być tworzone oddzielnie, jak je połączyć? ani '' 'grid.arrange' ani praca plot_grid' cowplot' za względu na klasie' obiektu autoplot'. – beetroot

+3

@beetroot; możesz przeglądać dane personalizujące etykiety. 'm <- mapply (funkcja (w, x, y, z) autoplot (mod, który = w) + laboratoria (x = x, y = y, title = z), w = 1: 6, x = pasta0 ("x", 1: 6), Y = paste0 ("Y", 1: 6), z = paste0 ("wet", 1: 6)) '. Prawdopodobnie istnieje prostszy sposób ich łączenia, ale wydaje się, że działa to: 'l <- do.call (c, lapply (m, function (x) x @ plot)); gridExtra :: grid.arrange (grobs = l, ncol = 2) ' – user20650

+2

wydaje się, że możesz także zrobić' p [1,1] <- p [1,1] + labs (x = "etykieta osi x z fig1" , y = "etykieta osi y z rysunku 1", tytuł = "Wykres 1") ", co może dać inną trasę (p jest oryginalnym autoplotem) – user20650

5

proponowana przez @ user20650 rozwiązania są ciekawe i eleganckie.

Oto mniej eleganckie rozwiązanie oparte na myautoplot, zmodyfikowana wersja autoplot. Mam nadzieję, że ci to pomoże.
Pobierz myautoplot funtion here i zapisać go w katalogu roboczym z nazwą myautoplot.r.
Następnie za pomocą następującego kodu:

library(ggplot2) 
library(ggfortify) 

source("myautoplot.r") 
mod <- lm(Petal.Width ~ Petal.Length, data = iris) 

#### 
# Define x-labels, y-labels and titles 
#### 
# Residuals vs Fitted Plot 
xlab_resfit <- "Xlab ResFit" 
ylab_resfit <- "Ylab ResFit" 
title_resfit <- "Title ResFit" 

# Normal Q-Q Plot 
xlab_qqplot <- "Xlab QQ" 
ylab_qqplot <- "Ylab QQ" 
title_qqplot <- "Title QQ" 

# Scale-Location Plot 
xlab_scaleloc <- "Xlab S-L" 
ylab_scaleloc <- "Ylab S-L" 
title_scaleloc <- "Title S-L" 

# Cook's distance Plot 
xlab_cook <- "Xlab Cook" 
ylab_cook <- "Ylab Cook" 
title_cook <- "Title Cook" 

# Residuals vs Leverage Plot 
xlab_reslev <- "Xlab Res-Lev" 
ylab_reslev <- "Ylab Res-Lev" 
title_reslev <- "Title Res-Lev" 

# Cook's dist vs Leverage Plot 
xlab_cooklev <- "Xlab Cook-Lev" 
ylab_cooklev <- "Ylab Cook-Lev" 
title_cooklev <- "Title Cook-Lev" 

# Collect axis labels and titles in 3 lists  
xlab_list <- list(resfit=xlab_resfit, qqplot=xlab_qqplot, 
     scaleloc=xlab_scaleloc, cook=xlab_cook, reslev=xlab_reslev, 
     cooklev=xlab_cooklev) 
ylab_list <- list(resfit=ylab_resfit, qqplot=ylab_qqplot, 
     scaleloc=ylab_scaleloc, cook=ylab_cook, reslev=ylab_reslev, 
     cooklev=ylab_cooklev) 
title_list <- list(resfit=title_resfit, qqplot=title_qqplot, 
     scaleloc=title_scaleloc, cook=title_cook, reslev=title_reslev, 
     cooklev=title_cooklev) 

# Pass the lists of axis labels and title to myautoplot 
myautoplot(mod, which=1:6, xlab=xlab_list, 
          ylab=ylab_list, 
          title=title_list) 

enter image description here

Powiązane problemy