4

我正在尝试从列表列表中绘制元素,特别是根据其所属的类为每个点着色,使用外部列表索引作为 ax 值,将内部列表的每个元素的值作为 ay 值。一个示例列表,包含 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绿色等。为了澄清,我试图在一个图表上完成所有这些。此外,列表元素的数量可能会因数据集而异。非常感谢有关如何解决此问题的任何指示!

4

2 回答 2

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

在此处输入图像描述

于 2012-10-15T16:01:38.217 回答
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")

结果:

在此处输入图像描述

于 2012-10-15T23:47:31.560 回答