我想绘制一组箱图,如下图所示:clears the float
#plot boxplots by variable and set
bp = boxplot(
val ~ (var * set),
bp_data,
col = bp_data$var,
xaxt = "n"
)
# add axis labels and legend
axis(1, at = seq(1.5,7.5,2), labels = paste("set", c(1:4)), tick=FALSE , cex.axis=1.2)
legend("topright", c("var 1", "var 2"), col=c("red", "green"),pch =15)
boxplot()
我对使用样本数据集生成的绘图非常满意。在此示例数据中,您可以看到,所有分布的n都为100.
但是,当我切换到实际数据时,我的向量当然不具有长度100,因此,我无法为boxplot()
提供包含val的矩阵。我不知道,如何调整给bp_data = list(
set = c(1,1,2,2,3,3,4,4),
var = rep(c("red", "green"), 4),
val = list(
a = runif(100, 1, 10),
b = runif(100, 1, 12),
c = runif(100, 1, 13),
d = runif(100, 1, 14),
e = runif(100, 1, 15),
f = runif(100, 1, 16),
g = runif(100, 1, 17),
h = runif(100, 1, 18)
)
)
的公式来创建具有真实数据的图。
我尝试使用以下内容准备我的数据:
set
将值存储为列表,可能会使各个向量的长度不同。但是boxplot不接受它当前的形式。
在我使用我的真实数据之前,我想让图表正常工作,以便相应地生成我的数据。但要解释一下,这就是我获取数据的方式。我按集(var
)迭代一个对象。对于每个集合,我计算变量,为此我将为每个变量(val
)创建一个名称,然后计算值(var
)。因此,对于每次迭代,我将生成set
长度为1的字符串,迭代的melt()
字符串和长度为80-100的值。
也许我可以更好地准备数据并使用reshape2的bp_data = data.frame(set = character(0), var = character(0), val = numeric(0))
for(set in names(data.obj)){
# store slope
bp_data = rbind(bp_data, data.frame(
set = survey,
var = "slope",
val = data.obj[[set]]$height / data.obj[[set]]$length
))
# store whatever
bp_data = rbind(bp_data, data.frame(
set = survey,
var = "whatever",
val = data.obj[[set]]$var1 / data.obj[[set]]$var2 + data.obj[[set]]$var3
))
}
做一些事情?我没有经验......
这是解决问题的好方法吗?
var targetEle = element(by.xpath(/html/body/app-root/div/app-dashboard/div/div/div[1]/div[3]/div/div[1]/h5'));
var EC_TIMEOUT = 5000;
browser.wait(EC.visibilityOf(targetEle), EC_TIMEOUT).then(function(){
browser.wait(EC.elementToBeClickable(targetEle), EC_TIMEOUT).then(function(){
//callback();
targetEle.click().then(function() {
callback();
});
});
});
答案 0 :(得分:0)
boxplot
不需要矩阵,也不需要相同长度的列表。
下面,我修改了您的数据生成步骤,使每个列表具有不同的长度。然后,只需要对代码进行细微更改。
## Modified data
bp_data = list(
set = c(1,1,2,2,3,3,4,4),
var = rep(c("red", "green"), 4),
val = list(
a = runif(70, 1, 10),
b = runif(75, 1, 12),
c = runif(80, 1, 13),
d = runif(85, 1, 14),
e = runif(90, 1, 15),
f = runif(95, 1, 16),
g = runif(100, 1, 17),
h = runif(105, 1, 18)
)
)
## Modified code
bp = boxplot(
bp_data$val,
col= bp_data$var,
xaxt = "n"
)
axis(1, at = seq(1.5,7.5,2), labels = paste("set", c(1:4)), tick=FALSE , cex.axis=1.2)
legend("topleft", c("var 1", "var 2"), col=c("red", "green"),pch =15)