gpt4 book ai didi

r - R 中的点图与点阵 : display of vertical axis and error bars

转载 作者:行者123 更新时间:2023-12-04 22:22:38 24 4
gpt4 key购买 nike

我正在尝试使用 lattice 中的库 latticeExtraR 做点图。但是,没有正确表示垂直 y 轴上的值。 R 不是选择数字变量的实际值,而是绘制值的等级。也就是说,有值 [375, 500, 625, 750, ..., 3000]R 绘制它们的等级 [1,2,3,4,...23] 并相应地选择比例。有人遇到过这样的问题吗?如何在垂直 y 尺度上使用像 (0, 500, 1000, 1500, ...) 这样的刻度来管理获得正确的表示?

到目前为止的程序代码:

df.dose <- read.table("data.csv", sep=",", header=TRUE)
library(lattice); library(latticeExtra)

useOuterStrips(dotplot(z ~ sample.size | as.factor(effect.size)*as.factor(true.dose),
groups=as.factor(type), data=df.dose, as.table=TRUE))

(从下面的评论中添加):另外,可以将误差线添加到图表中吗?我想到了以下内容(要添加到通话中),但似乎不起作用。有可能吗?
up=z+se, lo=z-se, panel.groups=function(x,y,..., up, lo, subscripts){ 
up <- up[subscripts]
lo <- lo[subscripts]
panel.segments(lo, as.numeric(y), up, as.numeric(y), ...)
}

这是我的数据: https://www.dropbox.com/s/egy25cj00rhum40/data.csv

补充:这是使用 expand.griddput 的数据的相关部分:
df.dose <- expand.grid(effect.size=c(-.5, -.625, -0.75),
sample.size=c(40L, 60L, 80L),
true.dose=c(375L, 500L, 750L, 1125L),
type=c("dose", "categ", "FP2", "FP1"))
df.dose$z <- c(875L, 875L, 750L, 750L, 750L, 625L, 625L, 625L, 625L, 875L,
875L, 750L, 1000L, 1000L, 1000L, 1125L, 1000L, 875L, 1000L, 1000L,
875L, 1000L, 1000L, 875L, 1125L, 1000L, 1000L, 1250L, 1125L,
1000L, 1250L, 1250L, 1125L, 1250L, 1000L, 1000L, 500L, 500L,
500L, 500L, 500L, 500L, 500L, 500L, 500L, 625L, 625L, 625L, 625L,
625L, 625L, 625L, 625L, 625L, 750L, 750L, 625L, 750L, 750L, 750L,
750L, 750L, 750L, 875L, 875L, 750L, 750L, 875L, 875L, 875L, 875L,
875L, 2500L, 1500L, 1125L, 2000L, 1000L, 1750L, 250L, 500L, 500L,
1250L, 750L, 625L, 875L, 500L, 500L, 875L, 500L, 375L, 1250L,
875L, 750L, 1000L, 625L, 625L, 875L, 500L, 500L, 1125L, 1000L,
875L, 1125L, 875L, 625L, 1125L, 1000L, 625L, 2500L, 2125L, 2375L,
2000L, 750L, 2625L, 250L, 625L, 250L, 875L, 875L, 500L, 625L,
500L, 625L, 1000L, 500L, 375L, 1000L, 875L, 625L, 875L, 500L,
500L, 875L, 500L, 500L, 1250L, 1125L, 875L, 1125L, 875L, 750L,
1250L, 1000L, 625L)

最佳答案

您需要使 z 成为一个因素:dotplot(factor(z) ~ ...
此外,您可能希望图中有一些抖动以防止重叠;尝试添加 jitter.x=TRUEjitter.y=TRUE ,或两者。

根据您在下面的评论并再次查看数据,我认为您以错误的方式绘制了点图。我认为您希望线条用于样本大小,而不是用于 z 的。如果你真的想要 z 在垂直轴上,那么你需要添加 horizontal=TRUE 。您还可以交换水平轴和垂直轴上的内容。

useOuterStrips(dotplot(z ~ factor(sample.size) | 
as.factor(effect.size)*as.factor(true.dose),
groups=as.factor(type), data=df.dose,
as.table=TRUE, horizontal=FALSE, jitter.x=TRUE))

要添加错误栏,它有点复杂,因为面板中有组,因此您需要使用 panel.groups 函数;此外,为了使线条不重叠,您可能希望将它们从一侧到另一侧稍微抖动一下,最好在自定义 panel 函数中完成。
df.dose$se <- 200
df.dose$type <- factor(df.dose$type)
df.dose$sample.size <- factor(df.dose$sample.size)

panel.groups.mydotplot <- function(x, y, subscripts, up, lo,
col=NA, col.line=NA, ...) {
panel.points(x, y, ...)
panel.segments(x, lo[subscripts], x, up[subscripts], col=col.line, ...)
}
panel.mydotplot <- function(x, y, subscripts, groups, ..., jitter=0.1) {
jitter <- seq(-1,1,len=nlevels(groups))*jitter
xx <- as.numeric(x) + jitter[as.numeric(groups[subscripts])]
panel.dotplot(x, y, groups=groups, subscripts=subscripts, pch=NA, ...)
panel.superpose(xx, y, groups=groups, subscripts=subscripts,
panel.groups=panel.groups.mydotplot, ...)
}
pp <- dotplot(z ~ sample.size | as.factor(effect.size)*as.factor(true.dose),
groups=type, data=df.dose, as.table=TRUE, horizontal=FALSE,
up=df.dose$z + df.dose$se, lo=df.dose$z - df.dose$se,
panel=panel.mydotplot, auto.key=list(space="right"))
useOuterStrips(pp)

关于r - R 中的点图与点阵 : display of vertical axis and error bars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12841895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com