在从CSV文件读取数据时,我正在尝试绘制雷达图。该数据以这样的方式排列,即在每5行从特定列读取数据之后绘制雷达图。
我有基于读取特定列(例如,在下面的示例中,前5行)绘制雷达图的代码。我如何自动化它(创建一个for循环),以便每读入5行数据,就绘制一张雷达图?
我当前的代码如下:
require(fmsb)
range <- c(0, 2)
id5 <- c(exceldata$excelcolumn[1:5])
id5.df <- data.frame(rbind(max=range[2], min=range[1], id5)
radarchart(id5.df ...)1:5是我手动指定的在绘制雷达图之前要读取的前5行。如何将其更改为for循环,以每5行绘制一张雷达图?
谢谢!
发布于 2013-06-18 10:58:30
一种经典的方法是用一个聪明的index.This拆分data.frame的几行,这对您来说是可行的:
ll <- split(seq(nrow(exceldata)),cumsum(seq(nrow(exceldata))%%5==1))
lapply(ll,function(x){
id5 <- c(exceldata$excelcolumn[x])
id5.df <- data.frame(rbind(max=range[2], min=range[1], id5)
radarchart(id5.df,...)
}例如,在一个可重现的例子上测试这一点。我创建了一个20行的data.frame,每5行创建一个雷达图。
set.seed(123)
N <- 20
dat <- data.frame(
total=runif(N, 1, 5),
phys=rnorm(N, 10, 2),
psycho=sample(c(0.5, NA, 3),N,rep=TRUE),
social=runif(N, 1, 5),
env=sample(c(5, 2.5, 4),N,rep=TRUE))
ll <- split(seq(nrow(dat)),cumsum(seq(nrow(dat))%%5==1))
op <- par(mar=c(1, 2, 2, 1),mfrow=c(2, 2))
lapply(ll,
function(x)radarchart(dat[x,]))
par(op)

https://stackoverflow.com/questions/17159350
复制相似问题