Plot dua grafik dalam plot yang sama di R

Saya akan seperti untuk plot y1 dan y2 di plot yang sama.

x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot(x, y1, type = "l", col = "red")
plot(x, y2, type = "l", col = "green")

Tapi ketika saya melakukan hal seperti ini, mereka tidak diplot dalam plot yang sama bersama-sama.

Dalam Matlab yang bisa dilakukan hold on, tapi tidak ada yang tahu bagaimana untuk melakukan hal ini di R?

Mengomentari pertanyaan (2)
Larutan

garis() atau titik() akan menambah grafik yang ada, tapi tidak akan membuat jendela baru. Jadi anda'a perlu untuk melakukan

plot(x,y1,type="l",col="red")
lines(x,y2,col="green")
Komentar (9)

Anda juga dapat menggunakan par dan plot pada grafik yang sama tetapi berbeda axis. Sesuatu seperti berikut:

plot( x, y1, type="l", col="red" )
par(new=TRUE)
plot( x, y2, type="l", col="green" )

Jika anda membaca secara detail tentang par di R, anda akan dapat benar-benar menghasilkan grafik yang menarik. Buku lain untuk melihat Paul Murrel's R Grafis.

Komentar (5)

Ketika membangun multilayer plot satu harus mempertimbangkan ggplot paket. Idenya adalah untuk menciptakan sebuah objek grafis dengan dasar estetika dan meningkatkan secara bertahap.

ggplot gaya membutuhkan data yang akan dikemas dalam data.frame.


# Data generation
x  
Komentar (4)

Saya berpikir bahwa jawaban yang anda cari adalah:

plot(first thing to plot)
plot(second thing to plot,add=TRUE)
Komentar (5)

Gunakan matplot fungsi:

matplot(x, cbind(y1,y2),type="l",col=c("red","green"),lty=c(1,1))

gunakan ini jika y1 dan y2 dievaluasi pada saat yang sama x poin. Skala sumbu-Y sesuai mana yang lebih besar (y1 atau y2), tidak seperti beberapa jawaban yang lain di sini yang akan klip y2 jika itu akan lebih besar dari y1 (ggplot solusi sebagian besar baik-baik saja dengan ini).

Sebagai alternatif, dan jika dua garis don't yang sama-sama memiliki koordinat x, mengatur sumbu batas lahan yang pertama dan tambahkan:


x1  
Komentar (0)

tl;dr: Anda ingin menggunakan curve (dengan add=TRUE) atau garis-garis.


Saya tidak setuju dengan par(new=TRUE) karena itu akan berlipat ganda-cetak tick-mark dan label sumbu. Misalnya

The output plot(sin); par(baru=T); plot( fungsi(x) x**2 ).

Lihatlah betapa kacau sumbu vertikal label! Sejak rentang yang berbeda, anda akan perlu untuk mengatur ylim=c(titik terendah antara dua fungsi, titik tertinggi antara dua fungsi), yang lebih mudah dari apa yang saya'm akan menunjukkan kepada anda---dan way kurang mudah jika anda ingin menambahkan tidak hanya dua kurva, tapi banyak.


Apa yang selalu saya bingung tentang merencanakan perbedaan antara curve dan garis. (Jika anda dapat't ingat bahwa ini adalah nama-nama dari dua hal penting dalam merencanakan perintah, hanya bernyanyi itu.)

Berikut's perbedaan besar antara curve dan garis.

curve akan plot fungsi, seperti kurva(dosa). garis plot titik x dan y nilai-nilai, seperti: baris( x=0:10, y=sin(0:10) ).

Dan berikut's perbedaan kecil: curve harus disebut dengan add=TRUE untuk apa yang anda're coba lakukan, sementara garis sudah mengasumsikan anda're menambah plot yang ada.

Berikut's hasil memanggil plot(0:2); kurva(dosa).


Di belakang layar, check out metode(plot). Dan memeriksa tubuh( plot.fungsi )[[5]]. Ketika anda meneleponplot(sin)R angka keluar bahwadosaadalah sebuah fungsi (bukan nilai-nilai y) dan menggunakanplot.fungsimetode, yang akhirnya memanggilcurve. Jadicurve` adalah alat yang dimaksudkan untuk menangani fungsi-fungsi.

Komentar (0)

Seperti yang dijelaskan oleh @redmode, anda dapat plot dua garis dalam grafis yang sama perangkat yang menggunakan ggplot. Dalam jawaban itu data yang di 'lebar' format. Namun, ketika menggunakan ggplot itu umumnya paling mudah untuk menjaga data-data dalam data frame dalam 'panjang' format. Kemudian, dengan menggunakan berbagai 'pengelompokan variabel-variabel' di `aes'thetics argumen, sifat-sifat garis, seperti linetype atau warna, akan bervariasi sesuai dengan pengelompokan variabel, dan sesuai legenda akan muncul.

Dalam hal ini, kita dapat menggunakan warna aessthetics, yang sesuai dengan warna dari garis-garis untuk tingkat yang berbeda dari variabel dalam data set (di sini: y1 vs y2). Tapi pertama-tama kita perlu untuk mencairkan data dari lebar ke format yang lama, menggunakan misalnya fungsi 'meleleh' dari reshape2 paket. Metode lain untuk membentuk kembali data yang dijelaskan di sini: Membentuk kembali data.bingkai dari lebar panjang untuk format.


library(ggplot2)
library(reshape2)

# original data in a 'wide' format
x  
Komentar (0)

jika anda ingin membagi plot menjadi dua kolom (2 petak berikutnya dengan satu sama lain), anda dapat melakukannya seperti ini:

par(mfrow=c(1,2))

plot(x)

plot(y) 

Referensi Link

Komentar (0)

Jika anda menggunakan base grafis (yaitu tidak kisi grafis), maka anda dapat meniru MATLAB's berpegang pada fitur dengan menggunakan titik-titik/garis/poligon fungsi untuk menambahkan rincian tambahan untuk plot tanpa memulai sebuah plot baru. Dalam kasus multiplot tata letak, anda dapat menggunakan par(mfg=...) untuk memilih mana plot anda menambahkan hal-hal ke.

Komentar (0)

Anda dapat menggunakan poin untuk overplot, yang.

plot(x1, y1,col='red')

points(x2,y2,col='blue')
Komentar (0)

Daripada menjaga nilai-nilai yang akan diplot dalam sebuah array, menyimpan mereka dalam matriks. Secara default seluruh matriks akan diperlakukan sebagai satu set data. Namun jika anda menambahkan jumlah yang sama pengubah untuk plot, misalnya col(), seperti yang anda miliki baris dalam matriks, R akan mengetahui bahwa setiap baris harus diperlakukan secara mandiri. Misalnya:

x = matrix( c(21,50,80,41), nrow=2 )
y = matrix( c(1,2,1,2), nrow=2 )
plot(x, y, col("red","blue")

Ini harus bekerja kecuali anda set data yang berbeda ukuran.

Komentar (1)

Anda bisa menggunakan ggplotly() fungsi dari plotly paket untuk mengubah salah satu gggplot2 contoh-contoh berikut ini ke plot interaktif, tapi saya pikir ini semacam plot lebih baik tanpa ggplot2:


# call Plotly and enter username and key
library(plotly)
x  
Komentar (3)

Idiomatik Matlab plot(x1,y1,x2,y2) dapat diterjemahkan dalam R dengan ggplot2 misalnya dalam cara ini:


x1 
Komentar (0)

Anda juga dapat membuat plot dengan menggunakan [ggvis][1]:


library(ggvis)

x  
Komentar (0)

Menggunakan plotly (menambahkan solusi dari plotly dengan primer dan sekunder sumbu y - tampaknya akan hilang):

library(plotly)     
x  %
    layout(title = 'Title',
       xaxis = list(title = "X-axis title"),
       yaxis2 = list(side = 'right', overlaying = "y", title = 'secondary y axis', showgrid = FALSE, zeroline = FALSE))

Screenshot dari demo bekerja:

Komentar (2)

kita juga dapat menggunakan kisi-kisi perpustakaan


library(lattice)
x 
Komentar (0)