/ / Діапазон дискретних значень з різним кольором - r, сюжет, ggplot2

Зробіть дискретні значення з різним кольором - r, сюжет, ggplot2

Даний кадр даних з дискретними значеннями,

d=data.frame(id=1:6, a=c(1,1,1,0,0,0), b=c(0,0,0,1,1,1), c=c(10,20,30,30,10,20))

Я хочу зробити сюжет на кшталт

введіть опис зображення тут

Однак я хочу зробити різний колір для кожного шару, скажімо, червоний та зелений для "a", жовтий / синій для "b".

Відповіді:

1 для відповіді № 1

Ідея полягає в переформатуванні даних (визначення координат для малювання прямокутників) для використання geom_rect від ggplot:

library(ggplot2)
library(reshape2)

i = setNames(expand.grid(1:nrow(d),1:ncol(d[-1])),c("x1","y1"))

ggplot(cbind(i,melt(d, id.vars="id")),
aes(xmin=x1, xmax=x1+1, ymin=y1,  ymax=y1+1, color=variable, fill=value)) +
geom_rect()

введіть опис зображення тут


0 для відповіді № 2

Спробуй geom_tile(). Але вам потрібно переробити свої дані, щоб отримати точно таку ж цифру, як ви представили.

df  <- data.frame(id=factor(c(1:6)), a=c(1,1,1,0,0,0), b=c(0,0,0,1,1,1), c=c(10,20,30,30,10,20))
library(reshape2)

df <- melt(df, vars.id  = c(df$id))

library(ggplot2)
ggplot(aes(x = id, y = variable, fill = value), data = df) + geom_tile()

введіть опис зображення тут


0 для відповіді № 3
require("dplyr")
require("tidyr")
require("ggplot2")

d=data.frame(id=1:6, a=c(1,1,1,0,0,0), b=c(0,0,0,1,1,1), c=c(10,20,30,30,10,20))

ggplot(d %>% gather(type, value, a, b, c) %>% mutate(value = paste0(type, value)),
aes(x = id, y = type)) +
geom_tile(aes(fill = value), color = "white") +
scale_fill_manual(values = c("forestgreen", "indianred", "lightgoldenrod1",
"royalblue", "plum1", "plum2", "plum3"))

введіть опис зображення тут


0 для відповіді № 4

Спочатку використовуємо reshape2 перетворити дані від широких до довгих. Потім для отримання дискретних значень ми використовуємо as.factor(value) і нарешті ми використовуємо scale_fill_manual призначити 5 різних потрібних нам кольорів. В geom_tile задаємо колір меж плитки.

library(reshape2)
library(ggplot2)
df <- data.frame(id=1:6, a=c(1,1,1,0,0,0), b=c(0,0,0,1,1,1), c=c(10,20,30,30,10,20))
df <- melt(df, id.vars=c("id"))
ggplot(df, aes(id, variable, fill = as.factor(value))) + geom_tile(colour = "white") +
scale_fill_manual(values = c("lightblue", "steelblue2", "steelblue3", "steelblue4", "darkblue"), name = "Values")+
scale_x_discrete(limits = 1:6)

введіть опис зображення тут