(:
我对R不是很了解,但我需要使用它来绘制数据的一组箱形图。
我有一组代表一组2D数据的 .csv 文件。它们包含以下列:
i:矩阵的行
j:矩阵的列
VBoot:矩阵的属性
我的数据是128 x 128,但 .csv 只包含非零属性的索引。
我必须并排绘制每个文件的方框图。
这是我的方法:
library(ggplot2)
library(reshape)
# Set the directory to read the files
setwd("/Users/me/data/CSV/")
operatorProperty <- function(operator, property, degrees, m, n)
{
p <- list()
for (degree in degrees)
{
file <- paste(c(degree, operator, property, ".csv"), collapse="")
data <- read.csv(file, header=TRUE, sep=" ", dec=".")
# Create an array m * n to fill with the data
b <- vector(mode="double", length=(m*n))
# Rebuild the complete data to properly build the box plot
b[data$i * m + data$j] = sqrt(data$VBoot)
p <- append(p, list(b))
}
p
}
到目前为止,我刚刚创建了一个列表来为每个ensamble插入数据。
然后,我应该建立一个data.frame
:
min_degree = 0
max_degree = 45
delta = 5
m = 128
n = 128
degrees <- seq(min_degree, max_degree, delta)
property <- "VBoot"
operator <- "Prewitt"
Sobel <- operatorProperty(operator, property, degrees, m, n)
df <- data.frame(degrees, Sobel)
df2<- melt(data=df,id.vars="degrees")
p <- ggplot(df2, aes(x=degrees,y=value,colour=variable)) +
geom_boxplot() +
theme(legend.title=element_blank()) +
xlab(expression(theta)) +
ylab("Bootstrap Variance")
但是,我无法构建data.frame
。我不知道该怎么办。可以找到数据的示例here。
提前谢谢。
答案 0 :(得分:0)
确定。好吧,我不得不改变一些事情来使用这个样本数据。这是设置
m = 128
n = 128
operatorProperty <- function(operator, property, degrees, m, n)
{
Map(function(degree) {
file <- paste(c(degree, operator, property, ".csv"), collapse="")
data <- read.table(file, header=TRUE, dec=".")
# Create an array m * n to fill with the data
b <- vector(mode="double", length=(m*n))
# Rebuild the complete data to properly build the box plot
b[data$i * m + data$j] = sqrt(data[[property]])
b
}, degrees)
}
degrees <- c('00','05')
property <- "MSE"
operator <- "Prewitt"
Sobel <- operatorProperty(operator, property, degrees, m, n)
使用此修改后的表单,Sobel
是一个列表,其中包含与不同度数对应的命名元素。我们可以将其转换为data.frame并使用
df2<- melt(data.frame(Sobel, check.names=F))
p <- ggplot(df2, aes(x=variable,y=value,colour=variable)) +
geom_boxplot() +
theme(legend.title=element_blank()) +
xlab(expression(theta)) +
ylab("Bootstrap Variance")
看起来非常有趣,因为你有这么多的零。所有非零条目都标记为异常值。
但即使我们没有很好地命名Sobel
列表,它基本上是一个包含两个向量的列表(每个度数一次)
list(c(0,0,0,0, ...), c(0,0,0,0,...))
如果您想将其与度数合并并转换为data.frame,则另一种选择可能是
do.call(rbind, Map(cbind.data.frame, degrees, Sobel))