![](/img/trans.png)
[英]Sharing axes and legends between subplots in plotly in R (faceting in ggplot2 and using ggplotly doesn't work)
[英]Different behavior between ggplot2 and plotly using ggplotly
我想打一個折線圖中plotly
,使其不會對整個長度相同的顏色。 顏色以連續刻度給出。 這是很容易在ggplot2
但是當我把它翻譯成plotly
使用ggplotly
函數變量決定像分類變量色彩的行為。
require(dplyr)
require(ggplot2)
require(plotly)
df <- data_frame(
x = 1:15,
group = rep(c(1,2,1), each = 5),
y = 1:15 + group
)
gg <- ggplot(df) +
aes(x, y, col = group) +
geom_line()
gg # ggplot2
ggplotly(gg) # plotly
另一方面,我發現一個變通辦法在ggplot2
表現ggplot2
。
df2 <- df %>%
tidyr::crossing(col = unique(.$group)) %>%
mutate(y = ifelse(group == col, y, NA)) %>%
arrange(col)
gg2 <- ggplot(df2) +
aes(x, y, col = col) +
geom_line()
gg2
ggplotly(gg2)
我也沒有找到一種方法直接在密謀。 也許根本沒有解決方案。 有任何想法嗎?
看起來ggplotly將group
視為一個因素,即使它是數字。 您可以使用geom_segment
作為解決方法,以確保在每對點之間繪制線段:
gg2 = ggplot(df, aes(x,y,colour=group)) +
geom_segment(aes(x=x, xend=lead(x), y=y, yend=lead(y)))
gg2
ggplotly(gg2)
關於@rawr(已刪除)的注釋,如果您要將線色映射到連續變量,我認為讓group
連續是有意義的。 以下是OP示例的擴展,它是一個連續的group
列,而不是只有兩個離散的類別。
set.seed(49)
df3 <- data_frame(
x = 1:50,
group = cumsum(rnorm(50)),
y = 1:50 + group
)
下面的圖gg3
使用geom_line
,但我也包含了geom_point
。 您可以看到ggplotly
正在繪制點。 但是,沒有行,因為沒有兩個點的group
值相同。 如果我們未包含geom_point
,則該圖將為空白。
gg3 <- ggplot(df3, aes(x, y, colour = group)) +
geom_point() + geom_line() +
scale_colour_gradient2(low="red",mid="yellow",high="blue")
gg3
ggplotly(gg3)
切換到geom_segment
給我們,我們想用線ggplotly
。 但是請注意,該行顏色將立足於價值group
在該段的第一個點(無論使用geom_line
或geom_segment
),所以要插值的值有可能是案件group
的每個(x之間,y在)以獲取更平滑的顏色漸變:
gg4 <- ggplot(df3, aes(x, y, colour = group)) +
geom_segment(aes(x=x, xend=lead(x), y=y, yend=lead(y))) +
scale_colour_gradient2(low="red",mid="yellow",high="blue")
ggplotly(gg4)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.