gpt4 book ai didi

r - geom_segment 变长错误

转载 作者:行者123 更新时间:2023-12-02 03:08:30 25 4
gpt4 key购买 nike

在我更新到版本 2.2.0 之前,以下代码在 ggplot2 中有效。现在我得到了 Error: Aesthetics must be either length 1 or the same as the data (30): x, y, xend, yend。该错误是由两次 geom_segment 调用引起的。

drug1 <- c(.7, -1.6, -.2, -1.2, -.1, 3.4, 3.7, .8, 0, 2)
drug2 <- c(1.9, .8, 1.1, .1, -.1, 4.4, 5.5, 1.6, 4.6, 3.4)
d <- data.frame(Drug=c(rep('Drug 1', 10), rep('Drug 2', 10),
rep('Difference', 10)),
extra=c(drug1, drug2, drug2 - drug1))

ggplot(d, aes(x=Drug, y=extra)) +
geom_boxplot(col='lightyellow1', alpha=.3, width=.5) +
geom_dotplot(binaxis='y', stackdir='center', position='dodge') +
stat_summary(fun.y=mean, geom="point", col='red', shape=18, size=5) +
geom_segment(aes(x=rep('Drug 1', 30), xend=rep('Drug 2', 30), y=drug1, yend=drug2),
col=gray(.8)) +
geom_segment(aes(x='Drug 1', xend='Difference', y=drug1, yend=drug2 - drug1),
col=gray(.8)) +
xlab('') + ylab('Extra Hours of Sleep') + coord_flip()

更新:改进的代码:

drug1 <- c(.7, -1.6, -.2, -1.2, -.1, 3.4, 3.7, .8, 0, 2)
drug2 <- c(1.9, .8, 1.1, .1, -.1, 4.4, 5.5, 1.6, 4.6, 3.4)
d <- data.frame(Drug=c(rep('Drug 1', 10), rep('Drug 2', 10),
rep('Difference', 10)),
extra=c(drug1, drug2, drug2 - drug1))
w <- data.frame(drug1, drug2, diff=drug2 - drug1)

ggplot(d, aes(x=Drug, y=extra)) +
geom_boxplot(col='lightyellow1', alpha=.3, width=.5) +
geom_dotplot(binaxis='y', stackdir='center', position='dodge') +
stat_summary(fun.y=mean, geom="point", col='red', shape=18, size=5) +
geom_segment(data=w, aes(x='Drug 1', xend='Drug 2', y=drug1, yend=drug2),
col=gray(.8)) +
geom_segment(data=w, aes(x='Drug 1', xend='Difference', y=drug1, yend=drug2 - drug1),
col=gray(.8)) +
xlab('') + ylab('Extra Hours of Sleep') + coord_flip()

最佳答案

代码的更新版本生成数据帧 d,如下所示:

drug1 <- c(.7, -1.6, -.2, -1.2, -.1, 3.4, 3.7, .8, 0, 2)
drug2 <- c(1.9, .8, 1.1, .1, -.1, 4.4, 5.5, 1.6, 4.6, 3.4)
d <- data.frame(Drug=c(rep('Drug 1', 10), rep('Drug 2', 10),
rep('Difference', 10)),
extra=c(drug1, drug2, drug2 - drug1))

> d
Drug extra
1 Drug 1 0.7
2 Drug 1 -1.6
3 Drug 1 -0.2
4 Drug 1 -1.2
5 Drug 1 -0.1
6 Drug 1 3.4
7 Drug 1 3.7
8 Drug 1 0.8
9 Drug 1 0.0
10 Drug 1 2.0
11 Drug 2 1.9
12 Drug 2 0.8
13 Drug 2 1.1
14 Drug 2 0.1
15 Drug 2 -0.1
16 Drug 2 4.4
17 Drug 2 5.5
18 Drug 2 1.6
19 Drug 2 4.6
20 Drug 2 3.4
21 Difference 1.2
22 Difference 2.4
23 Difference 1.3
24 Difference 1.3
25 Difference 0.0
26 Difference 1.0
27 Difference 1.8
28 Difference 0.8
29 Difference 4.6
30 Difference 1.4

由于两个原因,这种创建数据框的方法有问题:

  1. 变量drug1drug2 存在于全局环境和data.frame d 中。这会造成混淆、掩蔽和其他错误的可能性。

  2. 差异 与产生差异的值相关联的唯一方法是行排序。例如,第 1 行和第 11 行的值在第 21 行产生了差异。如果您以后对数据集进行任何修改,这可能会产生问题。

我建议以这样的方式创建数据框:

d2 <- data.frame(
pair = 1:10,
drug1 = c(.7, -1.6, -.2, -1.2, -.1, 3.4, 3.7, .8, 0, 2),
drug2 = c(1.9, .8, 1.1, .1, -.1, 4.4, 5.5, 1.6, 4.6, 3.4)
)

pair drug1 drug2
1 1 0.7 1.9
2 2 -1.6 0.8
3 3 -0.2 1.1
4 4 -1.2 0.1
5 5 -0.1 -0.1
6 6 3.4 4.4
7 7 3.7 5.5
8 8 0.8 1.6
9 9 0.0 4.6
10 10 2.0 3.4

有一个明确的 pair 变量链接这些值,d2 之外不存在 drug1drug2 的额外副本

然后您可以使用 tidyr 转换为 tidy/long 格式(以便与 ggplot 和建模包一起使用):

tidyr::gather(d2, drug, value, drug1, drug2)

pair drug value
1 1 drug1 0.7
2 2 drug1 -1.6
3 3 drug1 -0.2
4 4 drug1 -1.2
5 5 drug1 -0.1
6 6 drug1 3.4
7 7 drug1 3.7
8 8 drug1 0.8
9 9 drug1 0.0
10 10 drug1 2.0
11 1 drug2 1.9
12 2 drug2 0.8
13 3 drug2 1.1
14 4 drug2 0.1
15 5 drug2 -0.1
16 6 drug2 4.4
17 7 drug2 5.5
18 8 drug2 1.6
19 9 drug2 4.6
20 10 drug2 3.4

关于r - geom_segment 变长错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41078897/

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