gpt4 book ai didi

r - 使用 r 缩放的水平和垂直线/刻度图( map )

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

这是我想绘制的小示例(2 个组和 2 个子组,只是为了简单起见,但是我可能有 n 个组和 k 个子组)。

grp <- c(  1,   1,   1,  1, 1,  1, 1, 1, 1,  2,2, 2, 2,2, 2, 2, 2, 2)
sgrp <- c("A", "A", "A", "A", "A", "B", "B", "B", "B" , "A", "A", "A", "A",
"B", "B", "B", "B", "B")
pos <- c(1.1, 2.1, 3.2, 4.1, 5.0,1.1, 2.0, 5.0, 6.2,1.0, 3.0, 4.1, 5.0,1.0,
2.1, 3.01, 4.0, 5.02)
mydf <- data.frame (grp, sgrp, pos)
grp sgrp pos
1 1 A 1.10
2 1 A 2.10
3 1 A 3.20
4 1 A 4.10
5 1 A 5.00
6 1 B 1.10
7 1 B 2.00
8 1 B 5.00
9 1 B 6.20
10 2 A 1.00
11 2 A 3.00
12 2 A 4.10
13 2 A 5.00
14 2 B 1.00
15 2 B 2.10
16 2 B 3.01
17 2 B 4.00
18 2 B 5.02

Pos 确定刻度需要在 x 轴上的位置。中心线(长线)从零开始,以 grp + 1 的最大位置结束。是否可以制作这样的图表?

结果图应如下所示:

enter image description here

编辑:
这是我可以做的小技巧,但没有实现(不接近)我想要的:
dgp <- c(0, 0, 0, 0, 0,  0.15, 0.15,0.15, 0.15 ,  0, 0, 0, 0,  
0.15, 0.15, 0.15, 0.15, 0.15)
mydf$dumv <- grp + dgp
plot(mydf$pos, mydf$dumv, pch = "+", ylab = "groups", xlab = "pos")

enter image description here

再次更新: ,有了一些想法,但存在问题:
require(ggplot2)

grp <- c( 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,2, 2, 2,2, 2, 2, 2, 2)
sgrp <- c("A", "A", "A", "A", "A", "B", "B", "B", "B" , "A", "A", "A", "A",
"B", "B", "B", "B", "B")
position <- c(1.1, 2.1, 3.2, 4.1, 5.0,1.1, 2.0, 5.0, 6.2,1.0, 3.0, 4.1, 5.0,1.0,
2.1, 3.01, 4.0, 5.02)
mydf <- data.frame (grp, sgrp, pos)
dgp <- c(0, 0, 0, 0, 0, 0.15, 0.15,0.15, 0.15 , 0, 0, 0, 0,
0.15, 0.15, 0.15, 0.15, 0.15)
mydf$barheight <- c(0.25)
mydf$group <- grp + dgp

ggplot(mydf) +
geom_line(aes(position, factor(group), group = factor(group)),
size = 2, colour = "purple") +
geom_rect(aes(y = factor(group),
xmin = position - 0.02,
xmax = position + 0.02,
ymin = group - barheight/2,
ymax = group + barheight/2))

问题: ....
(1)我不能让组非因素,矩形的位置在错误的地方,我想把A,B放在一起,而1和2之间有间隙。

(2)在真实数据中,我会有两个以上的组,我可以自动计算dgp吗?

enter image description here

最佳答案

 plot(NULL, ylim=c(0,4), xlim=range(mydf$pos))
abline(h=1:4 ,col=1:2 )
with(mydf, segments(x0=pos, y0=as.numeric(interaction(mydf$grp, mydf$sgrp))-.2,
y1=as.numeric(interaction(mydf$grp, mydf$sgrp))+.2,
col= mydf$grp, lty=as.numeric(mydf$sgrp)) )

(我还不是 ggplot 用户,所以这是基本图形。您可以调整 ylim 并添加 ylab 参数以正确标记。您可能还想使用 yaxt="n"axis() 来标记您的组和子组。)
enter image description here

这是使用交互值从垂直位置向量中选择的替代设置。
 plot(NULL, ylim=c(0.5,4.5), xlim=range(mydf$pos))
with(mydf, segments(x0=pos,
y0=c(1.3,1.7,3.3,3.7)[as.numeric(interaction(mydf$grp, mydf$sgrp))]-.1,
y1=c(1.3,1.7,3.3,3.7)[as.numeric(interaction(mydf$grp, mydf$sgrp))]+.1,
col= mydf$sgrp, lty=as.numeric(mydf$grp)) )
abline(h=c(1.3,1.7,3.3,3.7) ,col= rep(1:2, each=2), lty=1:2,lwd=3)

enter image description here

关于r - 使用 r 缩放的水平和垂直线/刻度图( map ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11350449/

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