从多个颜色的列表列表中绘制元素

时间:2012-10-15 15:54:10

标签: r graphics

我试图从列表列表中绘制元素,特别是根据它所属的类着色每个点,使用外部列表索引作为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绿色等等。为了澄清,我试图在一个图表上完成所有操作。此外,列表元素的数量可能会根据数据集而变化。关于如何解决这个问题的任何指示都非常感谢!

2 个答案:

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

enter image description here

答案 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")

结果:

enter image description here