我想从列表中的值生成(分组和堆叠)条形图:
dog = list(a=100, c=30, t=140, g=102)
cat = list(a=99, c=31, t=150, g=123)
pig = list(a=100, c=12, t=90, g=144)
在第一个条形图中,数据应该是字母(ACTG),并且每只动物都应该拥有它自己的条形图。
第二个条形图应该是一个叠加图,每个动物显示a
,c
,t
和g
的百分比。
在help(barplot)
我读过,我需要生成一个类似Matrix的数据结构。将数据放入matrix
?
在一个例子中我也看到,人们使用已经有名字的?tables
。表格和矩阵之间有什么区别,我如何从数据中生成表格?
答案 0 :(得分:2)
以下是将数据合并到矩阵中的一种方法:
temp <- do.call(cbind, lapply(list(dog = dog, cat = cat, pig = pig), unlist))
temp
# dog cat pig
# a 100 99 100
# c 30 31 12
# t 140 150 90
# g 102 123 144
str(temp)
# num [1:4, 1:3] 100 30 140 102 99 31 150 123 100 12 ...
# - attr(*, "dimnames")=List of 2
# ..$ : chr [1:4] "a" "c" "t" "g"
# ..$ : chr [1:3] "dog" "cat" "pig"
is.matrix(temp)
# [1] TRUE
如果您想将动物作为行,请使用rbind
或转置(t
)数据。
从那里开始,绘图很简单:
# Grouped by ACGT, each animal own bar
barplot(t(temp), beside = TRUE)
# Stacked bar plot
barplot(prop.table(temp, margin = 2))
添加传说,标题等的练习将留给读者:)
table
一个matrix
,但我不认为这是您在寻找数据的原因。通常,table
函数用于制表频率。
这是一个基本的例子:
set.seed(1)
mydf <- data.frame(A = sample(letters[1:4], 20, replace = TRUE),
B = sample(c("red", "green", "blue"), 20, replace = TRUE))
mytable <- table(mydf)
mytable
# B
# A blue green red
# a 0 3 1
# b 3 0 2
# c 2 3 0
# d 1 2 3
is.matrix(mytable)
# [1] TRUE
barplot
函数将直接接受此作为输入。
最后,快速将您的数据转换为“长”data.frame
(这很有用,正如@mOnhawk所证明的那样,不仅仅是为ggplot2
绘图,还有lattice
})使用如下内容:
temp <- stack(data.frame(dog = dog, cat = cat, pig = pig))
temp1 <- cbind(temp[-2], do.call(rbind, strsplit(as.character(temp$ind), "\\.")))
答案 1 :(得分:1)
您可以使用
创建matrix
data <- matrix(c(dog, cat, pig), nrow=3, ncol=4, dimnames=list(c("dog", "cat", "pig"), c("A", "C", "T", "G")))
data
> dog cat pig
> A 100 99 100
> C 30 31 12
> T 140 150 90
> G 102 123 144
简介:
barplot(data)
结果:
x <- data.frame(
animals=c(rep("dog",4),rep("cat",4),rep("pig",4)),
gen=c(rep(c("A","C","T","G"),3)),
value=c(100,30,140,102,99,31,150,123,100,12,90,144))
> animals gen value
> 1 dog A 100
> 2 dog C 30
> 3 dog T 140
> 4 dog G 102
> 5 cat A 99
> 6 cat C 31
> 7 cat T 150
> 8 cat G 123
> 9 pig A 100
> 10 pig C 12
> 11 pig T 90
> 12 pig G 144
借助:
library(ggplot2)
library(reshape2)
ggplot(mx, aes(x=animals,y=value)) +
geom_bar(stat="identity") +
facet_grid(~gen)
结果: