R:列表中的散点图
R: scatterplot from list
我有类似下面的数据:
a <- list("1999"=c(1:50), "2000"=rep(35, 20), "2001"=c(100, 101, 103))
我想制作一个散点图,其中 x 轴是年份(列表名称给出的 1999、2000、2001),y 轴是每个列表中的值。是否有捷径可寻?我可以通过简单的 boxplot(a)
实现接近我想要的效果,但我希望它是散点图而不是箱线图。
这会做你想做的事
do.call(rbind,
lapply(names(a), function(year) data.frame(year = year, obs = a[[year]]))
)
或者将其分解为两个函数调用(lapply
和 do.call
),以便更容易理解正在发生的事情。如果你通过它,这很简单。 lapply
每年创建一个数据框,其中每年获取列表中该年的所有值。现在你有 3 个数据框。然后 do.call
将这些数据帧绑定在一起。
您可以创建一个数据框,其中一列是年份,另一列是值,然后您可以绘制相应的列:
b <- data.frame(year=as.numeric(rep(names(a), sapply(a, length))), val=unlist(a))
plot(b)
一个选项使用tidyr/dplyr/ggplot2
library(ggplot2)
library(tidyr)
library(dplyr)
unnest(a, year) %>%
ggplot(., aes(x=year, y=x)) +
geom_point(shape=1)
我有类似下面的数据:
a <- list("1999"=c(1:50), "2000"=rep(35, 20), "2001"=c(100, 101, 103))
我想制作一个散点图,其中 x 轴是年份(列表名称给出的 1999、2000、2001),y 轴是每个列表中的值。是否有捷径可寻?我可以通过简单的 boxplot(a)
实现接近我想要的效果,但我希望它是散点图而不是箱线图。
这会做你想做的事
do.call(rbind,
lapply(names(a), function(year) data.frame(year = year, obs = a[[year]]))
)
或者将其分解为两个函数调用(lapply
和 do.call
),以便更容易理解正在发生的事情。如果你通过它,这很简单。 lapply
每年创建一个数据框,其中每年获取列表中该年的所有值。现在你有 3 个数据框。然后 do.call
将这些数据帧绑定在一起。
您可以创建一个数据框,其中一列是年份,另一列是值,然后您可以绘制相应的列:
b <- data.frame(year=as.numeric(rep(names(a), sapply(a, length))), val=unlist(a))
plot(b)
一个选项使用tidyr/dplyr/ggplot2
library(ggplot2)
library(tidyr)
library(dplyr)
unnest(a, year) %>%
ggplot(., aes(x=year, y=x)) +
geom_point(shape=1)