我试图从列表列表中绘制元素,特别是根据它所属的类着色每个点,使用外部列表索引作为x值,将内部列表的每个元素的值作为y值。示例列表,包含2个子列表:
sample.list <- list(list("A"=0,"B"=0.14285, "C"=0.75), list("A"=0.138,"B"=0,"C"=0.1))
[[1]]
[[1]]$A
[1] 0
[[1]]$B
[1] 0.14285
[[1]]$C
[1] 0.75
[[2]]
[[2]]$A
[1] 0.138
[[2]]$B
[1] 0
[[2]]$C
[1] 0.1
我想要的输出会在点
处绘制第一个子列表 (1, 0), (1, 0.14285), (1, 0.5)
(即子列表元素形成沿x=1
的垂直线),并且类似地绘制第二子列表。此外,每个子列表元素都有不同的颜色 - A
可以是红色,B
绿色等等。为了澄清,我试图在一个图表上完成所有操作。此外,列表元素的数量可能会根据数据集而变化。关于如何解决这个问题的任何指示都非常感谢!
答案 0 :(得分:3)
library(plyr)
library(ggplot2)
library(reshape2)
df <- melt(ldply(sample.list, data.frame))
df2 <- ddply(df, .(variable), function(x) { x$index <- 1:nrow(x); x})
ggplot(df2, aes(index, value, color = variable)) +
geom_point(size=3) + scale_x_continuous(breaks = seq(1:max(df2$index)))
答案 1 :(得分:2)
这是非ggplot-ers的基本解决方案:
plot(1:length(sample.list),ylim=c(0,max(unlist(sample.list))),xaxt="n",ann=FALSE)
axis(1,at=1:length(sample.list),labels=1:length(sample.list))
invisible(
sapply(
1:length(sample.list),
function(x) {
tmp2plot <- sample.list[[x]]
points(rep(x,length(tmp2plot)),unlist(tmp2plot),col=1:length(tmp2plot),pch=19)
}
)
)
title(xlab="Index",ylab="Value")
结果: