How to plot stacked proportional graph?

青春壹個敷衍的年華 提交于 2019-12-11 01:39:43

问题


I have a data frame:

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

I want to plot a stacked bar plot that shows the percentage of each columns. So, each bar represents one row and and each bar is of length but of three different colors each color representing percentage of val0, val1 and val2.

I tried looking for it, I am getting only ways to plot stacked graph but not stacked proportional graph.

Thanks.


回答1:


Using ggplot2

For ggplot2 and geom_bar

  1. Work in long format
  2. Pre-calculate the percentages

For example

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))

# will return the same plot as above

base R

A table object can be plotted as a mosaic plot. using plot. Your x is (almost) a table object

# 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)

you could also use mosaicplot directly

mosaicplot(x[,2:4], main = 'Proportions')


来源:https://stackoverflow.com/questions/16051363/how-to-plot-stacked-proportional-graph

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!