我有一个data.frame,我在y轴上绘制一个值id,对x轴上的值t绘制另一个值s
library(plotly)
library(dplyr)
# create data.frame
df <- data.frame(id=c("a","b","c"),s=c(1,3,2),t=c(3,2,1))
# set order
levels <- df %>%
arrange(s) %>%
.$id #[1] a c b
# plot
df %>%
mutate(id=factor(id, levels = levels)) %>%
plot_ly(x=~t,y=~id) %>%
add_markers()
这很好用。
但是我想添加一条垂直线,表示t的平均值,加权为s
line <- weighted.mean(df$t,df$s)
我无法找到正确的方法
TIA
答案 0 :(得分:1)
为了防止Plotly使用分类值对y轴进行排序,您可以绘制多条显示为一行的行。
p <- add_lines(p,
x = rep(line, nrow(df)),
y = df$id)
library(plotly)
library(dplyr)
# create data.frame
df <- data.frame(id=c("a","b","c"),s=c(1,3,2),t=c(3,2,1))
# set order
levels <- df %>%
arrange(s) %>%
.$id #[1] a c b
# plot
p <- df %>%
mutate(id=factor(id, levels = levels)) %>%
plot_ly(x=~t,y=~id) %>%
add_markers()
line <- weighted.mean(df$t,df$s)
p <- add_lines(p,
x = rep(line, nrow(df)),
y = df$id)
p