Как построить сложенный пропорциональный график?
У меня есть фрейм данных:
x <- data.frame(id=letters[1:3],val0=1:3,val1=4:6,val2=7:9)
id val0 val1 val2
1 a 1 4 7
2 b 2 5 8
3 c 3 6 9
Я хочу построить линейчатую диаграмму, которая показывает процентное содержание каждого столбца. Таким образом, каждый столбец представляет одну строку, и каждый столбец имеет длину, но трех разных цветов, каждый из которых представляет процент от val0, val1 и val2.
Я пытался найти его, я получаю только способы построения сложного графика, но не сложенного пропорционального графика.
Благодарю.
1 ответ
Использование ggplot2
За ggplot2
а также geom_bar
- Работа в длинном формате
- Предварительно рассчитать проценты
Например
library(reshape2)
library(plyr)
# long format with column of proportions within each id
xlong <- ddply(melt(x, id.vars = 'id'), .(id), mutate, prop = value / sum(value))
ggplot(xlong, aes(x = id, y = prop, fill = variable)) + geom_bar(stat = 'identity')
# note position = 'fill' would work with the value column
ggplot(xlong, aes(x = id, y = value, fill = variable)) +
geom_bar(stat = 'identity', position = 'fill', aes(fill = variable))
# вернет тот же график, что и выше
база R
Объект таблицы может быть нанесен как мозаичный график. с помощью plot
, Ваш x
является (почти) табличным объектом
# get the numeric columns as a matrix
xt <- as.matrix(x[,2:4])
# set the rownames to be the first column of x
rownames(xt) <- x[[1]]
# set the class to be a table so plot will call plot.table
class(xt) <- 'table'
plot(xt)
Вы также можете использовать mosaicplot
непосредственно
mosaicplot(x[,2:4], main = 'Proportions')