- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 ggplot 的 geom_boxplot
并为分位数段使用我自己的数据列,而不是 stat_boxplot
返回的数据列。
经过一些转换后的数据如下所示:
> allquartile
T method s.0% s.25% s.50% s.75% s.100%
1 2 LDA -196.76273 -190.38842 -184.01411 -177.63979 -171.26548
2 3 LDA -171.53987 -166.16923 -160.79859 -115.28652 -69.77446
3 4 LDA -161.17590 -157.61372 -149.71026 -124.68926 -69.77446
4 5 LDA -194.10553 -179.83165 -175.14337 -168.46104 -159.07206
经过大量的搜索和挖掘,我发现我的绘图命令应该是这样的:
p <- ggplot(allquartile,aes(x=T, ymin=`s.0%`, lower=`s.25%`,
middle=`s.50%`, upper=`s.75%`,
ymax=`s.100%`, color=method)) +
geom_boxplot(stat="identity")
这应该使用 s.0% 作为最小值,s.25% 作为下限,等等。但是当我尝试显示 p
时,我得到了以下错误:
Error in eval(expr, envir, enclos) : object 's.0%' not found
Calls: print ... lapply -> is.vector -> lapply -> FUN -> eval -> eval
我也尝试过使用 aes_string
代替 aes
,但我得到了这个错误:
Error in aes_string(x = T, ymin = `s.0%`, lower = `s.25%`, middle = `s.50%`, :
object 's.0%' not found
我对 R 和 ggplot2 都很陌生,所以我不太确定如何解释这个,但我假设这是因为 .
在 s.0 %
.
如果有任何关于如何解决此问题的建议,我将不胜感激。
编辑:我进行了更多研究,我认为这是由于我对分位数方法的误解所致。我通过以下命令创建了 allquartile
:
allquartile <-aggregate(list(s=topicquality$score), list(T=topicquality$T,method=topicquality$method),FUN=quantile,probs=seq(0, 1, .25))
而且我意识到没有名为 score.0%
、score.25%
等的列。只有 score
列有 5 个值。所以这归结为:我如何访问 score
中的这 5 个值?
我发现我的数据集存在问题。正如我在编辑中提到的,根据我形成数据框的方式,score.0%
、score.25%
等列并不存在。例如,运行 colnames(allquartile)
返回:
[1] "T" "method" "score"
事实证明,score
列是一个值向量。运行 allquartile$score
给我:
0% 25% 50% 75% 100%
[1,] -196.7627 -190.3884 -184.0141 -177.6398 -171.26548
[2,] -171.5399 -166.1692 -160.7986 -115.2865 -69.77446
[3,] -161.1759 -157.6137 -149.7103 -124.6893 -69.77446
[4,] -194.1055 -179.8316 -175.1434 -168.4610 -159.07206
[5,] -200.1544 -174.2835 -167.7209 -145.3432 -129.54586
然后我可以通过以下方式访问每个分位数的值
> allquartile$score[,1]
[1] -196.7627 -171.5399 -161.1759 -194.1055 -200.1544
我对 R 不够熟悉,不知道这是什么类型的数据结构,但我会称它为矩阵。因此,就像任何好的矩阵对象一样,m[,column]
返回列的值,而 m[row,]
返回行的值,而 m [row, column]
获取单元格值。
考虑到这一点,我意识到正确的绘图命令应该是
p <- ggplot(allquartile,
aes(x=T,
ymin=score[,1],
lower=score[,2],
middle=score[,3],
upper=score[,4],
ymax=score[,5],
color=method)) +
geom_boxplot(stat="identity")
这完美地描绘出了一切。
感谢大家的好建议,虽然没有解决问题,但对解决问题帮助很大。
最佳答案
实际上,根据您的编辑,我认为您真正的问题是您不应该使用 aggregate
。如果您应用的函数返回多个值(如 quantile
),aggregate
默认以您观察到的有点不方便的格式返回结果。
事情是这样的。一个数据框,有点令人困惑,实际上是一个列表,每一列都是列表的一个元素。唯一的要求是每个“列”具有相同的行数。所以你得到一个包含三个“列”的数据框:第三列只是一个矩阵!
用 aggregate
做这个是可能的,但还有更方便的工具。 (例如,您可以调用 cbind(allquartile[,1:2],allquartile[,3])
来创建“正确”维度的数据框。)
例如,一个非常流行的是来自 plyr
包的 ddply
。下面是一个使用一些虚构数据的示例,但遵循数据的一般结构:
topicquality <- data.frame(score = runif(20),
T = rep(letters[1:2],each = 10),
method = rep(letters[3:4],length.out = 20))
ddply(topicquality,.(T,method),FUN = function(x,...){quantile(x$score,...)},probs = seq(0,1,0.25))
您会注意到,这将返回您期望的维度的数据框,但您仍然需要处理不方便的列名。这最好在您应用于每件作品的功能中处理:
myQuantile <- function(x,...){
tmp <- quantile(x,...)
names(tmp) <- NULL #Or something else convenient
tmp
}
ddply(topicquality,.(T,method),FUN = myQuantile,probs = seq(0,1,0.25))
关于r - 使用带分位数的 geom_boxplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7678261/
我想预先计算数据的按变量摘要(使用 plyr 并传递 quantile 函数),然后使用 geom_boxplot(stat = "identity") 绘图.这很好用,除了它 (a) 不将异常值绘制
我创建了一些分组箱线图,基本上针对 x 轴上的每个维度,我展示了不同的组。因为我的数据集非常大,所以我不得不预先计算框的值,因为 ggplot 没有足够的内存(我使用 ddply 并分段计算)。 我相
我想对 geom_boxplot() 做一些修改。因为我的箱线图有时真的很“小”(参见图中的黄色和绿色分支 here),我想更加突出中位数。那么是否可以调整中线的粗细? 最佳答案 这个解决方案在文档中
过去,我已经能够使用 ggplot2 创建箱线图,方法是提供下须、下分位数、中位数、上分位数和上须以及 x 轴标签。例如: DF <- data.frame(x=c("A","B"), min=c(1
我正在尝试在 geom_box 图上添加极值(异常值与否)的标签。 我发现了这个问题,它与我的几乎完全相似 [ extreme value labels ggplot2 in geom_boxplot
例如, ggplot(mpg, aes(class, hwy)) + geom_boxplot( outlier.colour = "black",
问题 我想使用 ggplot 的 geom_boxplot 并为分位数段使用我自己的数据列,而不是 stat_boxplot 返回的数据列。 经过一些转换后的数据如下所示: > allquartile
我有以下箱线图: import os iris = pandas.read_table(os.path.expanduser("~/iris.csv"),
我正在尝试将希腊符号放入我在 ggplot2 中制作的箱线图中。但是,在完成了之前关于堆栈溢出的所有问题之后,我终生无法让他们的任何示例起作用。 所以很抱歉重新发布,但如果有人能在这里帮助我,我将不胜
我一直在使用 R/ggplot2 成功生成与我公司使用的商业工具生成的图表非常接近的图表。但是有一些功能我无法在使用 R 生成的箱线图中实现。 图表底部的摘要“表格”,显示中位数、计数、离群值等项目。
这个问题在这里已经有了答案: Use mean in ggplot boxplots instead of median (1 个回答) How to plot mean and standard e
我正在使用 geom_boxplot使用股市数据绘制烛台。问题是单个箱线图的上下边缘以及上须端点在 y 轴上显示的比其相应值高得多。不过,每个箱线图的相对高度(上下边缘之间的差异)和下须的端点都很好。
我有以下数据框: df = data.frame(ymin = c(0.35,0.4,0.25,0.3,0.55,0.6), lower = c(0.45,0.5,0.35,0.4,0.65,0.7)
我正在尝试为下面的数据框绘制一个箱线图。运行下面的代码似乎不起作用,根本没有输出。运行后 ggplot(aes(time, size)) + 不知何故数据框被更改为列表。有人帮忙吗? SUBJECTI
我正在使用 ggplot2 中的 geom_boxplot 制作箱线图。但是,我发现 mustache 长度不正确,我不知道为什么。这是我的数据: value = c(1.3739117,0.8709
我有一个数据集,其中包含 100 次列车运行模拟的数据,该网络具有 4 列火车、6 个车站和每个车站每列火车的到达晚点。我的数据看起来像这样: MyData <- data.frame( Simu
我正在制作一个箱线图,其中 x和 fill映射到不同的变量,有点像这样: ggplot(mpg, aes(x=as.factor(cyl), y=cty, fill=as.factor(drv)))
我可能遇到了一种罕见的情况,我想使用 R 绘制几个组的值。的 ggplot2的 geom_violin + geom_boxplot ,按组填充和着色 fiddle ,并按组为盒子着色。有时,一个或多
我可以更改箱线图图例中使用的符号吗?我想使用正方形而不是默认的箱线图符号。经过一番搜索后,我尝试了以下操作,但是最后一行似乎没有效果: df = data.frame(x = rnorm(10), y
出于某种晦涩的原因,我必须绘制一个没有明显中位数的箱线图。我怎样才能做到这一点(使用 ggplot 是首选,但如果有必要,我会切换到 boxplot )? 相关回答: 使用 fatten参数:我尝试将
我是一名优秀的程序员,十分优秀!