aggiungere x=y linea di dispersione

Sto usando la dispersione funzione dal pacchetto auto per generare un grafico a dispersione.
Voglio essere in grado di generare una linea di riferimento nella trama che dovrebbe essere x=y.
Ho provato ad utilizzare abline e aggiungere una riga ma non è x=y linea. Qualcuno può aiutare?

Il mio codice è il seguente:

scatterplot(phenos$P1~pheno$P0, data=pheno,spread=FALSE,ylab="6 month timepoint", xlab="Baseline Timepoint", jitter=list(x=1, y=1))
abline(0,1)

Grazie.

  • Suppongo che si crea un boxplot invece di un grafico a dispersione. Giusto?
  • Che cosa si ottiene? Che tipo di dati è P1 e P0?
  • abline(0,1) aggiunge una linea di pendenza=1 e intercetta=0, e quindi non dovrebbe darti ciò di cui hai bisogno. Se si forniscono alcuni dati per tracciare (in modo da poter vedere ciò che si vede quando si esegue la dispersione e abline comandi), siamo in grado di fornire ulteriori informazioni.
  • per ottenere x=y , lines(pheno$P0,pheno$P0)
  • car::scatterplot fa un sacco di roba di fantasia internamente, tra cui l’utilizzo della layout() funzione, che sta per rendere molto più difficile la sovrapposizione di qualcosa di semplice come un 1:1 linea …

 

3 Replies
  1. 1

    Questo in realtà è abbastanza difficile/hackish, perché scatterplot() utilizza internamente layout, il che rende difficile il controllo sottotrama attualmente utilizzato dal driver della scheda grafica. (Aggiornamento: è più difficile di quanto pensassi — impostazione par("mfg") deve essere stato un lavoro più o meno casuali.)

    Fare il backup dei dati (aggiornamento: utilizzando i dati con una media di x e y non sono pari a zero e diverso da ogni altro, come si illustrano le difficoltà del ingenuamente utilizzando abline() più chiaramente)

    set.seed(1)
    d <- data.frame(x=rnorm(10,mean=10),y=rnorm(10,mean=12))
    library(car)

    Provare la mia vecchia strategia (che in realtà non funziona, o funziona solo in modo imprevedibile):

    scatterplot(y~x,data=d,reset.par=FALSE)
    k <- 1              
    for (i in 1:2) {
       for (j in 1:2) {
          par(mfg=c(i,j,2,2))
            abline(0,1,lwd=3,col=k)
            k <- k+1
      }

    }

    A seconda di come lo faccio, ottengo errori e avvisi o risposte fasulle. Sembra importa se faccio il scatterplot() chiamata all’interno di una funzione … ??

    aggiungere x=y linea di dispersione

    Secondo tentativo, più conservativo: ricostruire layout da zero.

     scatterplot(y~x,data=d)
     uu <- par("usr")
     ## mimic layout frolm car:::scatterplot.default.  Would be different if we were drawing only one
     ## of x-boxes or y-boxes
     layout(matrix(c(1, 0, 3, 2), 2, 2), widths = c(5, 95), 
            heights = c(95, 5))
     oldmar <- par(mar=rep(0,4))  ## zero out margins so we can plot in sub-boxes without errors
     ## now skip through the first two sub-plots
     par(new=TRUE); plot.new(); par(new=TRUE); plot.new()
     par(oldmar)  ## reset margins
     ## blank plot with user limits set and 'interior' axis calculations
     plot(0:1,0:1,xlab="",ylab="",xlim=uu[1:2],ylim=uu[3:4],xaxs="i",yaxs="i")
     ## add annotation
     abline(a=0,b=1,col=4,lwd=3)              

    aggiungere x=y linea di dispersione

    Data la quantità di sforzo e la fragilità di questa soluzione, che potrebbe in realtà essere migliore di hack scatterplot per consentire facoltativamente abline() essere specificata in aggiunta, o chiedere al manutentore per questa capacità …

    • Ben, ho scoperto che non ho bisogno di nessuna impostazione del parametro per ottenere y=x riga per tracciare correttamente. Ho appena fatto scatterplot(y~x,data=d) e poi abline(0,1) e y=x linea è stata tracciata. Si ottiene lo stesso comportamento?
    • Addendum: ho provato la stessa cosa con diversi casuale insiemi di dati e ha scoperto che a volte abline dà una retta con intercetta di y = 0 e, a volte, l’intercetta y è spostato leggermente sotto lo zero, ma io ho sempre ottenere la corretta pendenza=1). Così mi trovo corretto.
    • Penso che sta andando a dipendere dal fatto che la trama di installazione succede per corrispondere a un qualcosa di cui (0,0) è vicino al centro della trama. Provare con mezzi diversi da (0,0) e vedere cosa succede …
    • quando cerco ‘abline(0,1)’, ho una linea che è un po ‘ sotto lo zero. È quasi un “lì”, ma non proprio. Ben, che il codice non ha funzionato per me, ho continuato a ottenere gli errori, l’ho trovato difficile da seguire, come avete fatto questo, mi dispiace! Principalmente ho voluto utilizzare la ‘dispersione()’ per i boxplot sugli assi. Dovrei provare a ripristinare base grafica in R per generare x=y linea. Ragazzi, sapete come aggiungere box plot per gli assi utilizzando di base la grafica poi?
    • ci danno un riproducibile esempio di qualcosa che non funziona, per favore.
    • come previsto, la y-interecept si muove leggermente, a seconda dei mezzi di punti tracciati.
    • che bello (presumo che dire se stai usando solo abline() senza la roba di fantasia nella mia risposta), ma … io non sono sorpreso. Devi essere più specifico su cosa “che il codice non ha funzionato per me, ho continuato a ottenere gli errori” significa-e se possibile, mostrare a noi esattamente, mettendo insieme una riproducibile risposta — vedi tinyurl.com/reproducible-000
    • In realtà ho appena finito di creare la trama in ggplot2 e ha funzionato. grazie comunque.

  2. 5

    Si può raggiungere il tuo obiettivo con la stessa funzione abline. Utilizzare la funzione abline(a=0, b=1) dove a e b sono l’intercetta e la pendenza della linea, rispettivamente. Questo disegna una linea retta di forma Y = a + b*x.

    Spero che questo aiuta.

  3. 3

    Mi basta usare i segmenti funzione:
    segmenti(x0=0,y0=0,x1=45,y1=45)

    Basta fare i valori di y va appena sopra i limiti di trama.

    Questa funzione è bello anche perché non cambiare la tua x e y i limiti in modo che la linea può eseguire pulizia attraverso il grafico senza dover scegliere accuratamente i valori di x e y.

    • Questo ha funzionato bene con il plot, non è certo scatterplot

Lascia un commento