Saya mencoba memvisualisasikan data dengan ggplot2, dan menambahkan 20 warna berbeda ke 20 kategori yang saya miliki di "deskripsi". Tanpa warna, skrip bekerja dengan sempurna (hanya hitam). Namun, dengan cara apa pun saya ingin menambahkan warna tetap hitam, atau dengan skrip di bawah ini saya mendapatkan kesalahan berikut: Error: Aesthetics must be either length 1 or the same as the data (2265723): colour Ini seharusnya tidak menjadi masalah, karena "Pastel1" memiliki 255 warna dan saya membuat variabel panjang.

Kumpulan data (deskripsi memiliki 20 kategori):

chr pos p description
1 445578 0.05 Metabolic
3 659990 0.34 Metabolic
5 789689 0.55 Immunological
6 678599 0.05 BodyStructures
7 97890 0.67 Cardiovascular
2 67899 0.01 Hematological
8 9867647 0.34 Nutritional
3 675890 0.55 Environment
6 799030 0.76 Psychiatric
4 8609000 0.88 Cognitive
6 789900 0.12 Musculoskeletal
3 90907878 0.22 Opthalmological
colourCount = length(unique(dataset$description))
getPalette = colorRampPalette(brewer.pal(9, "Pastel1"))
Nean_PheWAS <- ggplot(dataset, aes(x=description, y=-log(p), colour = getPalette(colourCount))) + 
geom_jitter(mapping=aes(x=as.factor(description), y=-log10(p))) +
theme_classic() + 
theme(axis.text.x = element_blank(), 
panel.grid.minor=element_line(colour = "grey", linetype="dashed"), axis.ticks=element_blank()) + 
labs(color="description", size="Effect size", x="Phenotype Classes", y="log(p-value)") +
geom_hline(yintercept=-log(0.01), color="red", size=1, alpha=0.5)

Saya juga terbuka untuk solusi lain untuk menambahkan 20 warna berbeda ke kategori.

1
kllrdr 28 Mei 2021, 16:22

1 menjawab

Jawaban Terbaik

Dengan asumsi bahwa Anda ingin mewarnai dengan variabel description, Anda dapat menggunakan palet ColorBrewer dengan colourCount jumlah elemen dengan menambahkan scale_colour_manual(values = getPalette(colourCount)) ke objek ggplot. Dan ubah colour = description dalam estetika:

colourCount = length(unique(dataset$description))
getPalette = colorRampPalette(brewer.pal(9, "Pastel1"))
Nean_PheWAS <- ggplot(dataset, aes(x=description, y=-log(p), colour = description)) + 
geom_jitter(mapping=aes(x=as.factor(description), y=-log10(p))) +
theme_classic() + scale_colour_manual(values = getPalette(colourCount)) +
theme(axis.text.x = element_blank(), 
panel.grid.minor=element_line(colour = "grey", linetype="dashed"), axis.ticks=element_blank()) + 
labs(color="description", size="Effect size", x="Phenotype Classes", y="log(p-value)") +
geom_hline(yintercept=-log(0.01), color="red", size=1, alpha=0.5)
1
VitaminB16 28 Mei 2021, 13:55