Dengan menggunakan kode berikut, saya mencoba menggambar empat plot pada grafik R
. Saya tidak senang dengan gambar tersebut karena ada banyak ruang di antara plot, oleh karena itu lebar plot tidak cukup memadai untuk menganalisis plot.
Bisakah seseorang membantu saya menghasilkan grafik yang bagus dengan empat plot?
Bagaimana saya bisa menjaga label sumbu x dari 1 hingga 10 bukan 5 label default?
Data:
a1: 11.013 13.814 13.831 13.714 13.787 13.734 13.778 13.771 13.823 13.659
a2: 5.181 7.747 8.314 8.061 7.920 8.153 8.540 8.845 7.881 8.301
Saya telah menggunakan data a1 untuk b1, c1, dan d1; a2 data untuk b2, c2, dan d2 hanya untuk di sini.
Angka:
Kode:
op=par(mfrow=c(4,1), mar=c(5.5,5.1,4.1,2.1))
plot(a1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="A")
lines(a2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
par(xpd=T)
legend(1,26.5,c("X","Y"),bty="n",horiz=T,cex=1.5,col=c("red1","darkblue"),text.col=c("red1","darkblue"),pch=c(1,3),lty=c(2,3),x.intersp=0.4,adj=0.2)
plot(b1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="B")
lines(b2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
plot(c1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="C")
lines(c2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
plot(d1/1000, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="D")
lines(d2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
> mtext("Price", side=2, at=100,line=3,cex=1.1)
r
data-visualization
samarasa
sumber
sumber
Jawaban:
Jika Anda ingin tetap menggunakan sesuatu seperti metode yang telah Anda gunakan maka Anda mungkin ingin mempelajari perintah tata letak (). Beberapa perubahan detail lainnya dan Anda bisa mendapatkan grafik lebih dekat bersama. Anda juga bisa memasukkan hal-hal unik yang berubah di antara grafik dalam daftar (seperti data dan margin) dan kemudian melalui loop. Juga, Anda akan perhatikan saya membuat sumbu bawah dengan perintah direct axis () sehingga Anda dapat mengontrol ke mana barang-barang itu pergi.
Saya harus mencatat bahwa saya benar-benar tidak berusaha membuat ini sebaik yang saya bisa dan alih-alih membuat grafik tiruan pertama saya bisa saja mengatur ruang yang cukup di frame pertama. Sayangnya pengaturan mar () mencoba untuk mengisi bingkai dan margin atas mempengaruhi jarak label di atas grafik sehingga saya harus pergi dan membuat semua label saya dengan mtext () atau teks () alih-alih hanya menggunakan pengaturan utama dalam plot dan saya tidak merasa ingin melakukan itu
sumber
Saya akan merekomendasikan mempelajari paket grafik kisi. Saya bisa mendekati apa yang Anda inginkan dengan beberapa baris. Pertama, kemas data Anda dalam bingkai data, sesuatu seperti ini:
yang menghasilkan:
Lalu, gunakan kisi-kisi
xyplot
:yang menghasilkan grafik yang bagus seperti:
EDIT:
Jika Anda ingin memiliki simbol dan garis yang berbeda dan memiliki itu muncul dalam legenda Anda, itu menjadi rumit, karena Anda benar-benar membangun legenda sendiri, dan Anda harus tahu cara mendapatkan warna kisi default jika Anda tidak menimpanya sendiri :
EDIT 2:
Anda dapat menyederhanakan kode dan grafik, jika dua kategori benar-benar sesederhana "X" dan "Y":
yang akan menggunakan "X" dan "Y" sebagai simbol titik. Anda tidak perlu legenda sama sekali, dan kemudian dapat mencurahkan lebih banyak ruang untuk grafik itu sendiri. (Di sisi lain, Anda mungkin tidak suka tampilan, atau mungkin merasa lebih sulit untuk menentukan pusat titik yang tepat, meskipun itu tidak menjadi masalah karena mungkin karena garis melewati setiap titik.)
EDIT 3:
Sebenarnya, Anda harus menambahkan
strip=F, strip.left=T,
plot, untuk menempatkan label A, B, C, D, di sebelah kiri grafik, yang memberi Anda lebih banyak ruang pada grafik panjang seperti ini:sumber
grid
hal: kisi dan ggplot2 build on grid) .Berikut adalah versi
ggplot2
solusi @ Brandon yang menggabungkan perilaku legenda yang diinginkan:Saya menemukan legenda menjadi jauh lebih mudah
ggplot2
, tetapi YMMV.EDIT
Mengatasi beberapa pertanyaan di komentar. Untuk menentukan titik atau garis tertentu jenis, Anda akan menggunakan
scale_aesthetic_manual
manaaesthetic
yang baikshape
,linetype
, dll Misalnya:Mengubah ukuran berbagai label sumbu dilakukan dengan mengubah pengaturan pada tema, biasanya menggunakan
opts()
. Contohnya:Anda harus benar-benar masuk ke situs web dan bukunya untuk informasi lebih lanjut.
sumber
Mirip dengan jawaban Wayne, saya juga akan menggunakan paket yang berbeda, yaitu
ggplot2
Yang memberi kita bagan seperti:
sumber
+ opts(panel.background=theme_blank())
theme_get()
untuk melihat apa yang bisa Anda ubah. Kemudian ikuti pola yang sama dengan komentar terakhir saya, mengaturnya=theme_blank()
melt()