Формирование столбчатой диаграммы / сетки стека с интенсивностью цвета, варьирующейся по значению
Я пытаюсь сделать сетку похожей на гистограмму с накоплением. Различные секции бара представляют категорию приложения, а ось x представляет столбец в своем ценовом классе. Я хочу, чтобы интенсивность цвета раздела панели изменялась в зависимости от количества приложений в категории. Я пытался использовать ggplot2 geom_bar, но не могу понять, как я могу построить категории на оси Y. Мои данные выглядят так:
Category No.Apps Price
Utilities 400 0
Utilities 300 1-10
Utilities 500 11-20
Utilities 200 21-30
Games 1000 0
Games 900 1-10
Games 400 11-20
Games 100 21-30
Productivity 300 0
Productivity 100 1-10
Productivity 50 11-20
Productivity 80 21-30
Я хочу, чтобы мой график выглядел примерно так:
с категориями по оси Y и ценовым классом по оси X.
2 ответа
Решение
library(ggplot2)
#making some fake data and putting it into a data.frame
price <- rnorm(n = 10000,mean = 5,sd = 2)
app <- sample(x = LETTERS[1:10],size = 10000,replace = T)
df <- data.frame(price,app)
head(df)
#now the plot
ggplot(df, aes(x=price,y=app))+
geom_bin2d()
Кажется, это близко к вашей графике, хотя цвета разные.
library(ggplot2)
ggplot(df, aes(x=Price,y=Category, fill=No.Apps)) +
geom_tile()+
scale_fill_gradientn(colours=rev(heat.colors(10)))+
scale_x_discrete(expand=c(0,0))+
scale_y_discrete(expand=c(0,0))+
coord_fixed()
Заметки:
- Используемый
geom_tile(...)
сделать блоки. - Используемый
rev(heat.colors(10))
создать цветовую палитру (красные для высоких значений, бледно-желтые для низких значений). - Используемый
coord_fixed(...)
поэтому блоки квадратные (соотношение сторон 1:1). - Используемый
expand=c(0,0)
таким образом, блоки заполняют всю область построения.