Saya sudah bangun dengan kecepatan R di bulan lalu.
Ini pertanyaan saya:
Apa cara yang baik untuk menetapkan warna ke variabel kategori di ggplot2 yang memiliki pemetaan stabil? Saya membutuhkan warna yang konsisten di seluruh set grafik yang memiliki himpunan bagian yang berbeda dan jumlah variabel kategori yang berbeda.
Sebagai contoh,
plot1 <- ggplot(data, aes(xData, yData,color=categoricaldData)) + geom_line()
dimana categoricalData
memiliki 5 level.
Lalu
plot2 <- ggplot(data.subset, aes(xData.subset, yData.subset,
color=categoricaldData.subset)) + geom_line()
dimana categoricalData.subset
memiliki 3 level.
Namun, level tertentu yang ada di kedua set akan berakhir dengan warna yang berbeda, yang membuatnya lebih sulit untuk membaca grafik bersama.
Apakah saya perlu membuat vektor warna dalam bingkai data? Atau adakah cara lain untuk menetapkan warna tertentu ke dalam kategori?
factor
yang umum di antara semua plot.fillScale <- scale_fill_manual(name = "grp",values = myColors)
untuk menggunakan ini dengan plot bar.Saya dalam situasi yang sama ditunjukkan oleh malcook dalam komentarnya : sayangnya jawaban oleh Thierry tidak bekerja dengan ggplot2 versi 0.9.3.1.
Ini dia gambar pertama:
dan gambar kedua:
Seperti yang bisa kita lihat, warnanya tidak tetap, misalnya E beralih dari magenta ke blu.
Seperti yang disarankan oleh malcook dalam komentarnya dan oleh hadley dalam komentarnya kode yang menggunakan
limits
berfungsi dengan benar:memberikan gambar berikut, yang benar:
Ini adalah output dari
sessionInfo()
:sumber
Solusi termudah adalah mengonversi variabel kategori Anda menjadi faktor sebelum berlangganan. Intinya adalah bahwa Anda memerlukan variabel faktor dengan tingkat yang sama persis di semua himpunan bagian Anda.
Dengan variabel karakter
Dengan variabel faktor
sumber
+ scale_colour_discrete(drop=TRUE,limits = levels(dataset$fCategory))
untuk melestarikan warna | asosiasi faktor tetapi, yang bekerja, kecuali, di tangan saya, penurunan = TRUE adalah TIDAK dihormati (saya berharap untuk menghapus tingkat dari legenda). Drat ... atau ini aku?Ini adalah pos lama, tetapi saya mencari jawaban untuk pertanyaan yang sama ini,
Mengapa tidak mencoba sesuatu seperti:
Jika Anda memiliki nilai kategorikal, saya tidak melihat alasan mengapa ini tidak berhasil.
sumber
myColors <- brewer.pal(5,"Set1"); names(myColors) <- levels(dat$grp)
untuk menghindari harus secara manual kode level.Berdasarkan jawaban yang sangat membantu oleh joran, saya dapat menemukan solusi ini untuk skala warna yang stabil untuk faktor boolean (
TRUE
,FALSE
).Karena ColorBrewer tidak terlalu membantu dengan skala warna biner, dua warna yang diperlukan ditentukan secara manual.
Berikut
myboolean
adalah nama kolom dalammyDataFrame
memegang faktor BENAR / SALAH.date
danduration
apakah nama kolom yang akan dipetakan ke sumbu x dan y plot dalam contoh ini.sumber