Saya ingin memplot y1 dan y2 dalam 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")
Tetapi ketika saya melakukannya seperti ini, mereka tidak diplot dalam plot yang sama.
Di Matlab orang dapat melakukannya hold on
, tetapi apakah ada yang tahu bagaimana melakukan ini di R?
?curve
. Gunakanadd=TRUE
.Jawaban:
lines()
ataupoints()
akan menambah grafik yang ada, tetapi tidak akan membuat jendela baru. Jadi, Anda harus melakukannyasumber
plot(sin); curve(cos, add=TRUE)
.lines(x2,y2,...)
bukannyalines(x,y2,...)
Anda juga dapat menggunakan
par
dan memplot pada grafik yang sama tetapi sumbu yang berbeda. Sesuatu sebagai berikut:Jika Anda membaca secara terperinci tentang
par
inR
, Anda akan dapat menghasilkan grafik yang sangat menarik. Buku lain untuk dilihat adalah R Graphics milik Paul Murrel.sumber
xlab="", ylab="", ...
dan beberapa orang lain dalam yang keduaplot
.Ketika membangun plot multilayer, seseorang harus mempertimbangkan
ggplot
paket. Idenya adalah untuk membuat objek grafis dengan estetika dasar dan meningkatkannya secara bertahap.ggplot
style membutuhkan data untuk dikemasdata.frame
.Solusi dasar:
Di sini
+ operator
digunakan untuk menambahkan lapisan tambahan ke objek dasar.Dengan
ggplot
Anda memiliki akses ke objek grafis pada setiap tahap merencanakan. Katakanlah, pengaturan langkah-demi-langkah yang biasa dapat terlihat seperti ini:g
menghasilkan plot, dan Anda bisa melihatnya di setiap tahap (baik, setelah pembuatan setidaknya satu lapisan). Pesona plot selanjutnya juga dibuat dengan objek yang dibuat. Misalnya, kita dapat menambahkan label untuk sumbu:Final
g
terlihat seperti:UPDATE (2013-11-08):
Sebagaimana ditunjukkan dalam komentar,
ggplot
filosofi menyarankan menggunakan data dalam format panjang. Anda dapat merujuk ke jawaban ini untuk melihat kode yang sesuai.sumber
ggplot
menangani ini lebih alami daripada format "lebar" yang Anda gunakan.ggplot
filosofi ...Saya pikir jawaban yang Anda cari adalah:
sumber
"add" is not a graphical parameter
peringatan kemudian hanya mencetak plot kedua dari yang pertama."add" is not a graphical parameter
. R sayaR version 3.2.3 (2015-12-10)
. Anda bisa menggunakanpar(new=TRUE)
perintah di antara plot-plot ini.Gunakan
matplot
fungsinya:gunakan ini jika
y1
dany2
dievaluasi padax
titik yang sama . Ini skala sumbu Y agar sesuai dengan mana yang lebih besar (y1
atauy2
), tidak seperti beberapa jawaban lain di sini yang akan klipy2
jika semakin besar dariy1
(solusi ggplot sebagian besar tidak masalah dengan ini).Atau, dan jika kedua garis tidak memiliki koordinat x yang sama, tetapkan batas sumbu pada plot pertama dan tambahkan:
Terkejut Q ini berumur 4 tahun dan tidak ada yang menyebutkan
matplot
ataux/ylim
...sumber
tl; dr: Anda ingin menggunakan
curve
(denganadd=TRUE
) ataulines
.Saya tidak setuju
par(new=TRUE)
karena itu akan mencetak dua kali tanda centang dan label sumbu. MisalnyaOutput dari
plot(sin); par(new=T); plot( function(x) x**2 )
.Lihat betapa kacau label sumbu vertikal! Karena rentangnya berbeda, Anda perlu menyetelnya
ylim=c(lowest point between the two functions, highest point between the two functions)
, yang tidak semudah yang akan saya tunjukkan kepada Anda --- dan jauh lebih mudah jika Anda ingin menambahkan bukan hanya dua kurva, tetapi banyak.Apa yang selalu membingungkan saya tentang merencanakan adalah perbedaan antara
curve
danlines
. (Jika Anda tidak dapat mengingat bahwa ini adalah nama-nama dari dua perintah plot yang penting, cukup nyanyikan ini.)Inilah perbedaan besar antara
curve
danlines
.curve
akan merencanakan fungsi, seperticurve(sin)
.lines
plot poin dengan nilai x dan y, seperti:lines( x=0:10, y=sin(0:10) )
.Dan inilah perbedaan kecil:
curve
perlu dipanggil denganadd=TRUE
apa yang Anda coba lakukan, sementaralines
sudah mengasumsikan Anda menambahkan ke plot yang ada.Inilah hasil dari panggilan
plot(0:2); curve(sin)
.Di belakang layar, periksa
methods(plot)
. Dan periksabody( plot.function )[[5]]
. Ketika Anda memanggilplot(sin)
angka R yangsin
merupakan fungsi (bukan nilai y) dan menggunakanplot.function
metode, yang akhirnya memanggilcurve
. Begitucurve
juga alat yang dimaksudkan untuk menangani fungsi.sumber
jika Anda ingin membagi plot menjadi dua kolom (2 plot bersebelahan), Anda dapat melakukannya seperti ini:
Tautan Referensi
sumber
Seperti dijelaskan oleh @redmode, Anda dapat memplot dua baris dalam perangkat grafis yang sama menggunakan
ggplot
. Dalam jawaban itu datanya dalam format 'lebar'. Namun, saat menggunakannyaggplot
umumnya paling mudah untuk menyimpan data dalam bingkai data dalam format 'panjang'. Kemudian, dengan menggunakan berbagai 'pengelompokan variabel' diaes
argumen tesis, sifat-sifat garis, seperti linetype atau warna, akan bervariasi sesuai dengan variabel pengelompokan, dan legenda yang sesuai akan muncul.Dalam hal ini, kita dapat menggunakan
colour
aessthetics, yang mencocokkan warna garis ke berbagai tingkat variabel dalam kumpulan data (di sini: y1 vs y2). Tetapi pertama-tama kita perlu mencairkan data dari format lebar ke panjang, menggunakan misalnya fungsi 'melt' darireshape2
paket. Metode lain untuk membentuk kembali data dijelaskan di sini: Membentuk kembali data.frame dari format lebar ke panjang .sumber
Jika Anda menggunakan grafik dasar (yaitu bukan grafik kisi / grid), maka Anda dapat meniru fitur MATLAB pada fitur dengan menggunakan fungsi titik / garis / poligon untuk menambahkan rincian tambahan ke plot Anda tanpa memulai plot baru. Dalam hal tata letak banyak tempat, Anda dapat menggunakan
par(mfg=...)
untuk memilih plot mana yang Anda tambahkan.sumber
Anda dapat menggunakan poin untuk overplot, yaitu.
sumber
Daripada menjaga nilai-nilai yang akan diplot dalam array, simpan nilai-nilai itu dalam matriks. Secara default seluruh matriks akan diperlakukan sebagai satu set data. Namun, jika Anda menambahkan jumlah pengubah yang sama ke plot, misalnya col (), seperti Anda memiliki baris dalam matriks, R akan mengetahui bahwa setiap baris harus diperlakukan secara independen. Sebagai contoh:
Ini akan berfungsi kecuali set data Anda memiliki ukuran yang berbeda.
sumber
Matlab idiomatis
plot(x1,y1,x2,y2)
dapat diterjemahkan dalam R denganggplot2
misalnya dengan cara ini:Terinspirasi oleh Tingting Zhao plot garis ganda dengan kisaran sumbu x yang berbeda Menggunakan ggplot2 .
sumber
Anda dapat menggunakan
ggplotly()
fungsi dari paket plotly untuk mengubah salah satu contoh gggplot2 di sini menjadi plot interaktif, tapi saya pikir plot semacam ini lebih baik tanpa ggplot2 :sumber
Anda juga dapat membuat plot menggunakan ggvis :
Ini akan membuat plot berikut:
sumber
Menggunakan
plotly
(menambahkan solusi dariplotly
dengan sumbu y primer dan sekunder- Tampaknya tidak ada):Tangkapan layar dari demo kerja:
sumber
Error in library(plotly) : there is no package called ‘plotly’
mengapa?plotly
? Anda perlu menginstal paket menggunakaninstall.packages("plotly")
perintah.kita juga bisa menggunakan pustaka kisi
Untuk warna tertentu
sumber