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?
526
16
garis()
atautitik()
akan menambah grafik yang ada, tapi tidak akan membuat jendela baru. Jadi anda'a perlu untuk melakukanAnda juga dapat menggunakan
par
dan plot pada grafik yang sama tetapi berbeda axis. Sesuatu seperti berikut:Jika anda membaca secara detail tentang
par
diR
, anda akan dapat benar-benar menghasilkan grafik yang menarik. Buku lain untuk melihat Paul Murrel's R Grafis.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 dalamdata.frame
.Saya berpikir bahwa jawaban yang anda cari adalah:
Gunakan
matplot
fungsi:gunakan ini jika
y1
dany2
dievaluasi pada saat yang samax
poin. Skala sumbu-Y sesuai mana yang lebih besar (y1
atauy2
), tidak seperti beberapa jawaban yang lain di sini yang akan klipy2
jika itu akan lebih besar dariy1
(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:
tl;dr: Anda ingin menggunakan
curve
(denganadd=TRUE
) ataugaris-garis
.Saya tidak setuju dengan
par(new=TRUE)
karena itu akan berlipat ganda-cetak tick-mark dan label sumbu. MisalnyaThe 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
dangaris
. (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
dangaris
.curve
akan plot fungsi, sepertikurva(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 denganadd=TRUE
untuk apa yang anda're coba lakukan, sementaragaris
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 menelepon
plot(sin)R angka keluar bahwa
dosaadalah sebuah fungsi (bukan nilai-nilai y) dan menggunakan
plot.fungsimetode, yang akhirnya memanggil
curve. Jadi
curve` adalah alat yang dimaksudkan untuk menangani fungsi-fungsi.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 menggunakanggplot
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' darireshape2
paket. Metode lain untuk membentuk kembali data yang dijelaskan di sini: Membentuk kembali data.bingkai dari lebar panjang untuk format.jika anda ingin membagi plot menjadi dua kolom (2 petak berikutnya dengan satu sama lain), anda dapat melakukannya seperti ini:
Referensi Link
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.Anda dapat menggunakan poin untuk overplot, yang.
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:
Ini harus bekerja kecuali anda set data yang berbeda ukuran.
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:Idiomatik Matlab
plot(x1,y1,x2,y2)
dapat diterjemahkan dalam R denganggplot2
misalnya dalam cara ini:Anda juga dapat membuat plot dengan menggunakan [ggvis][1]:
Menggunakan
plotly
(menambahkan solusi dariplotly
dengan primer dan sekunder sumbu y - tampaknya akan hilang):Screenshot dari demo bekerja:
kita juga dapat menggunakan kisi-kisi perpustakaan