题
我正在尝试为不同的数据集和不同的算法绘制一堆ROC区域。我有三个变量:"Scheme"指定使用的算法,"Dataset"是正在测试算法的数据表,"Area_under_ROC"。
我正在使用r中的晶格库,使用以下命令:
dotplot(Scheme~Area_under_ROC/Dataset,data=simulationSummary,layout=c(4,6))
这就是我得到的:
方案与方案的点图.以Dataset为条件的Area_under_ROC
我想知道的是
- 如何使y轴上的标签可读?现在,他们都挤在一起了。
- 如何重新排列面板,使标记为"100"的数据集形成最后一列,但其他列保持不变?
我会非常感激任何意见或指针。非常感谢!
解决方案
一些想法:
- 为y轴标签使用较小的字体大小,例如
scale=list(y=list(cex=.6))
.另一种方法是保持统一的字体大小,但在几个页面上分开输出(这可以通过layout=
),或者,可能更好,显示来自同一数据集的所有数据(A到F,因此每个算法有4个点)或样本大小(10到100,因此每个算法有6个点)group=
选择。我个人会创造两个因素,sample.size
和dataset.type
为了这个。 降低你的因素
Dataset
, ,以便您感兴趣的数据集出现在哪里layout
会把他们,或(更好!)使用index.cond
为您的24个面板指定一个特定的安排.例如。,dfrm <- data.frame(algo=gl(11, 1, 11*24, labels=paste("algo", 1:11, sep="")), type=gl(24, 11, 11*24, labels=paste("type", 1:24, sep="")), roc=runif(11*24)) p <- dotplot(algo ~ roc | type, dfrm, layout=c(4,6), scale=list(y=list(cex=.4)))
将按顺序排列面板,从左下到右上(
type1
在左下方面板,type24
在右上方面板),而update(p, index.cond=list(24:1))
将以相反的顺序排列面板。只需指定一个
list
与预期的面板位置。
以下是我对第1点的想法以及使用两个因素而不是一个因素的示例。让我们生成另一个人工数据集:
dfrm <- data.frame(algo=gl(11, 1, 11*24, labels=paste("algo", 1:11, sep="")),
dataset=gl(6, 11, 11*24, labels=LETTERS[1:6]),
ssize=gl(4, 11*6, 11*24, labels=c(10,25,50,100)),
roc=runif(11*24))
xtabs(~ dataset + ssize, dfrm) # to check allocation of factor levels
dotplot(algo ~ roc | dataset, data=dfrm, group=ssize, type="l",
auto.key=list(space="top", column=4, cex=.8, title="Sample size",
cex.title=1, lines=TRUE, points=FALSE))
其他提示
此外, chl答案 分裂后 Dataset
类型到类型和大小,你可以使用 useOuterStrips
功能从latticeExtra包。
为了获得更多的标签空间,你可以"转置"情节。
# prepare data:
simulationSummary$Dataset_type <- substr(simulationSummary$Dataset, 1, 5)
simulationSummary$Dataset_size <- substr(simulationSummary$Dataset, 6, 10)
# to gets proper order force factor levels:
simulationSummary$Dataset_size <- factor(simulationSummary$Dataset_size,
levels = c("10", "25", "50", "100"))
library(latticeExtra)
useOuterStrips(dotplot(
Scheme ~ Area_under_ROC | Dataset_type*Dataset_size,
data = simulationSummary,
layout = c(4,6)
))
或使用垂直点图:
useOuterStrips(dotplot(
Area_under_ROC ~ Scheme | Dataset_size*Dataset_type,
data = simulationSummary, horizontal=FALSE,
layout = c(4,6), scales=list(x=list(rot=90))
))
不隶属于 StackOverflow