Pertanyaan Cara menentukan warna berbeda dengan ggplot


library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point(size=4)

Misalkan Anda memiliki yang di atas scatterplot. Bagaimana Anda bisa menentukan poin-poin itu >= 25 mpg akan diplot red, yang satu between 20 and 25  green dan 0-20  blue?

Bisakah ini dilakukan dengan ggplot secara khusus?


6
2018-02-08 13:14


asal


Jawaban:


Anda melakukan ini dalam dua langkah:

Pertama, Anda mendefinisikan kelompok-kelompok yang seharusnya memiliki warna berbeda; baik dengan menambahkan kolom lain ke frame data atau di dalam aes. Saya akan gunakan aes sini:

aes(wt, mpg, color = cut(mpg, breaks = c(0, 20, 25, Inf)))

Kedua, dengan menentukan warna manual atau skala isian:

scale_color_manual(values = c('blue', 'green', 'red'),
                   limits = c('(0,20]', '(20,25]', '(25,Inf]'))

Ini menentukan warna mana yang akan digunakan (values) dan label mana yang ditetapkan untuk itu (limits); ini adalah nama-nama pengelompokan yang dihasilkan oleh cut.

Diambil bersama-sama:

ggplot(mtcars) +
    aes(wt, mpg, color = cut(mpg, breaks = c(0, 20, 25, Inf))) +
    geom_point(size = 4) +
    scale_color_manual(values = c('blue', 'green', 'red'),
                       limits = c('(0,20]', '(20,25]', '(25,Inf]'))

Anda dapat meningkatkan judul legenda dengan menambahkan pengelompokan sebagai kolom terpisah ke data Anda, atau dengan memberikan guides panggilan fungsi:

guides(color = guide_legend(title = 'mpg range'))

6
2018-02-08 13:33



Tentu bisa, walaupun jenis pekerjaan ini mungkin paling cocok untuk bekerja dengan kerangka data Anda sebelumnya ggplot(). Anda bisa menggunakannya ifelse() seperti ini:

library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg))
library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point(size=4, aes(color = ifelse(mpg > 25, ">25",
                                   ifelse(mpg > 20, "<20", "20-25")))) +
    scale_color_manual(values = c(">25" = "red", "<20" = "blue", "20-25" = "green"),
                       name = "MPG")

enter image description here

Anda tidak perlu menelepon guides() untuk membuat judul, Anda dapat meneruskannya ke name = .. argumen dalam scale_color_manual()


2
2018-02-08 13:17