Saya menggunakan R dan saya memiliki dua frame data: wortel dan mentimun. Setiap kerangka data memiliki kolom numerik tunggal yang mencantumkan panjang semua wortel yang diukur (total: 100k wortel) dan mentimun (total: 50k mentimun).
Saya ingin membuat dua histogram - panjang wortel dan panjang mentimun - pada plot yang sama. Mereka tumpang tindih, jadi saya kira saya juga perlu transparansi. Saya juga perlu menggunakan frekuensi relatif bukan angka absolut karena jumlah instance dalam setiap kelompok berbeda.
sesuatu seperti ini akan menyenangkan tetapi saya tidak mengerti cara membuatnya dari dua tabel saya:
Jawaban:
Gambar yang Anda tautkan adalah untuk kurva kerapatan, bukan histogram.
Jika Anda membaca di ggplot maka mungkin satu-satunya hal yang Anda lewatkan adalah menggabungkan dua frame data Anda menjadi satu yang panjang.
Jadi, mari kita mulai dengan sesuatu seperti apa yang Anda miliki, dua set data yang terpisah dan menggabungkannya.
Setelah itu, yang tidak perlu jika data Anda sudah dalam format panjang, Anda hanya perlu satu baris untuk membuat plot Anda.
Sekarang, jika Anda benar-benar ingin histogram, berikut ini akan berfungsi. Perhatikan bahwa Anda harus mengubah posisi dari argumen "tumpukan" default. Anda mungkin kehilangan itu jika Anda tidak benar-benar tahu seperti apa data Anda seharusnya. Alfa yang lebih tinggi terlihat lebih baik di sana. Juga perhatikan bahwa saya membuatnya kepadatan histogram. Sangat mudah untuk menghapus
y = ..density..
untuk mendapatkannya kembali ke hitungan.sumber
ggplot(vegLengths, aes(length, fill = veg)) + geom_bar(pos="dodge")
. Ini akan membuat histogram interlaced, seperti di MATLAB.Berikut ini adalah solusi yang lebih sederhana menggunakan grafis dasar dan alpha-blending (yang tidak bekerja pada semua perangkat grafis):
Kuncinya adalah bahwa warnanya semi-transparan.
Sunting, lebih dari dua tahun kemudian : Karena ini baru saja mendapat upvote, saya kira saya bisa menambahkan visual dari apa yang dihasilkan kode sebagai alpha-blending sangat berguna:
sumber
plot
perintah? Anda dapat menempatkan semua opsi itu ke dalamhist
perintah dan hanya dua di dua baris.plot
perintah langsung ke perintah hist seperti yang saya katakan. Memposting kode bukanlah untuk apa komentar.Inilah fungsi yang saya tulis yang menggunakan pseudo-transparansi untuk mewakili histogram yang tumpang tindih
Berikut cara lain untuk melakukannya menggunakan dukungan R untuk warna transparan
Hasilnya akhirnya terlihat seperti ini:
sumber
postscript
)Sudah ada jawaban yang indah, tetapi saya berpikir untuk menambahkan ini. Terlihat bagus untukku. (Menyalin nomor acak dari @Dirk).
library(scales)
diperlukan`Hasilnya adalah...
Pembaruan: Fungsi yang tumpang tindih ini mungkin juga bermanfaat bagi sebagian orang.
Saya merasa hasil dari
hist0
lebih cantik untuk dilihat daripadahist
Hasil dari
adalah
sumber
Berikut adalah contoh bagaimana Anda dapat melakukannya dalam grafik "klasik" R:
Satu-satunya masalah dengan ini adalah bahwa itu terlihat jauh lebih baik jika istirahat histogram disejajarkan, yang mungkin harus dilakukan secara manual (dalam argumen yang diteruskan ke
hist
).sumber
ggplot
) yang secara langsung menjelaskan jika dua histogram Anda memiliki ukuran sampel yang sangat berbeda.breaks=seq(min(data$some_property), max(data$some_property), by=(max_prop - min_prop)/20)
Inilah versi seperti ggplot2 yang saya berikan hanya di basis R. Saya menyalin beberapa dari @nullglob.
menghasilkan data
Anda tidak perlu memasukkannya ke dalam bingkai data seperti dengan ggplot2. Kelemahan dari metode ini adalah Anda harus menulis lebih banyak detail dari alur cerita. Keuntungannya adalah Anda memiliki kendali atas detail plot yang lebih banyak.
sumber
@Dirk Eddelbuettel: Ide dasarnya sangat bagus tetapi kode seperti yang ditunjukkan dapat ditingkatkan. [Butuh waktu lama untuk menjelaskan, karena itu jawaban yang terpisah dan bukan komentar.]
The
hist()
Fungsi secara default menarik plot, sehingga Anda perlu menambahkanplot=FALSE
opsi. Selain itu, lebih jelas untuk menetapkan area plot denganplot(0,0,type="n",...)
panggilan di mana Anda dapat menambahkan label sumbu, judul plot dll. Akhirnya, saya ingin menyebutkan bahwa orang juga dapat menggunakan shading untuk membedakan antara dua histogram. Ini kodenya:Dan inilah hasilnya (agak terlalu lebar karena RStudio :-)):
sumber
postscript
perangkat.API R Plotly mungkin berguna bagi Anda. Grafik di bawah ini ada di sini .
Pengungkapan penuh: Saya di tim.
sumber
Begitu banyak jawaban yang bagus tetapi karena saya baru saja menulis fungsi (
plotMultipleHistograms()
) berfungsi untuk melakukan ini, saya pikir saya akan menambahkan jawaban lain.Keuntungan dari fungsi ini adalah bahwa ia secara otomatis menetapkan batas sumbu X dan Y yang sesuai dan mendefinisikan satu set tempat sampah yang umum digunakan di semua distribusi.
Berikut cara menggunakannya:
The
plotMultipleHistograms()
Fungsi dapat mengambil sejumlah distribusi, dan semua parameter memplot umum harus bekerja dengan itu (misalnya:las
,main
, dll).sumber