2017-05-25 112 views
0

我有一個data.frame,我在y軸上繪製一個值,id,對x軸上的一個值t另一個值s如何添加一條垂直線到R的陰謀圖和y變量的因子

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() 

這工作正常。

enter image description here

但是我想添加一個垂直線表示T的平均值,由s

line <- weighted.mean(df$t,df$s) 

加權和我無法找到正確的方式來做到這一點

TIA

回答

0

爲了防止Plotly使用分類值對y軸進行排序,您可以繪製多條顯示爲一條線的線。

p <- add_lines(p, 
       x = rep(line, nrow(df)), 
       y = df$id) 

enter image description here


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 
+0

我想在加權平均點的垂直線(因此在該示例中這將是在1.83)從「A」到「b」延伸的一路在我的情節。 x_values = weighted.mean(df $ t,df $ s)將行放在正確的位置,但像y_values = c(as.character(levels [1]),as.character(levels [length(levels)]))根據需要在a和b之間插入一行,但將y軸重新排列爲字母順序,這不是我想要的 – pssguy

+0

@pssguy:感謝您的澄清!查看更新的答案。 –

+0

@Maximillian Peters非常感謝。在更正的代碼中,我認爲我們現在可以不使用x_values&y_values。更重要的是,我認爲它應該是nrow(df)而不是長度(df)。我認爲後者只適用於這個例子,因爲行數等於列數。如果你可以確認我在這裏是正確的,那麼我會把它作爲答案 – pssguy

相關問題