首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用R中的进行两因素分组的三维线图?

如何用R中的进行两因素分组的三维线图?
EN

Stack Overflow用户
提问于 2020-04-17 22:16:08
回答 1查看 588关注 0票数 1

我已经检查了普洛特利的官方网页,但是如何绘制以下任务仍然让我无法理解:

代码语言:javascript
复制
id <- c(rep(1,5), rep(2,5), rep(3,5), rep(4,5))
t <- rep(seq(50,75,length.out=5), 4)
x <- runif(20) + sin(t) 
y <- rnorm(20) + cos(t)
gender <- c(rep("F",10), rep("M",10))
smoke <- c(rep("Y",5), rep("N",10), rep("Y",5))

DATA <- data.frame(ID, t, x, y, gender, smoke)

fig <- plot_ly(DATA, x = ~t, y = ~y, z = ~x, .......)

假设我有4组患者(按2种因素分组,女性/男性和吸烟者/不吸烟者),每一组患者都与沿时间戳$t_i$的5个观察$(x_i,y_i)$相关。因此,我需要为每个病人绘制一个3D线图$${(t_i,x_i,y_i)}_{i=1}^{i=5}$,但所有这些都在一个绘图画布中。如果我想用红色/蓝色表示性别,用实线表示吸烟者,用短线表示不吸烟者,并在图例中指定这些,我应该做什么(最好使用R)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-17 22:49:14

你心目中的三维图形可以这样实现:

代码语言:javascript
复制
library(plotly)

id <- c(rep(1,5), rep(2,5), rep(3,5), rep(4,5))
t <- rep(seq(50,75,length.out=5), 4)
x <- runif(20) + sin(t) 
y <- rnorm(20) + cos(t)
gender <- c(rep("F",10), rep("M",10))
smoke <- c(rep("Y",5), rep("N",10), rep("Y",5))

DATA <- data.frame(id, t, x, y, gender, smoke)

col_gender <- c(M = "red", F = "blue")
lt_smoke <- c(Y = "solid", N = "dash")
sym_id <- c(`1` = "circle", `2` = "square", `3` = "diamond", `4` = "cross")

fig <- plot_ly(DATA, 
               x = ~x, y = ~y, z = ~t, symbol = ~id, color = ~gender, linetype = ~smoke, type = 'scatter3d', mode = 'lines+markers',
               line = list(width = 6),
               marker = list(size = 3.5, cmin = -20, cmax = 50),
               colors = col_gender,
               linetypes = lt_smoke,
               symbols = sym_id)
fig

编辑:

对于更多的患者,最好的选择是使用transform id在彩色和附加分组上映射id

代码语言:javascript
复制
library(plotly)

id <- c(rep(1,5), rep(2,5), rep(3,5), rep(4,5), rep(5,5), rep(6,5), rep(7,5), rep(8,5))
t <- rep(seq(50,75,length.out=5), 8)
x <- runif(40) + sin(t) 
y <- rnorm(40) + cos(t)
gender <- c(rep("F",10), rep("M",10), rep("F",10), rep("M",10))
smoke <- c(rep("Y",5), rep("N",10), rep("Y",5), rep("Y",5), rep("N",10), rep("Y",5))

lt_smoke <- c(Y = "solid", N = "dash")
sym_id <- c(M = "circle", F = "square")

fig <- plot_ly(DATA, 
               x = ~x, y = ~y, z = ~t, symbol = ~gender, color = ~id, linetype = ~smoke, type = 'scatter3d', mode = 'lines+markers',
               line = list(width = 6),
               marker = list(size = 3.5, cmin = -20, cmax = 50),
               linetypes = lt_smoke,
               symbols = sym_id,
               transforms = list(
                 list(
                   type = 'groupby',
                   groups = ~id)
               ))
fig
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61281600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档