簡體   English   中英

ggplot2和ggplotly之間的行為不同

[英]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表現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_linegeom_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM