ggplotly没有正确显示geom_line

时间:2016-04-21 00:18:09

标签: r plot ggplot2 plotly

我正在尝试使用ggplotly为我的ggplot图表添加交互性。我试过在RStudio和命令行中运行它,结果相同。

数据:

library(plotly)
df1 <- as.data.frame(list('x'=1:100,'y'=1:100,'lw'=abs(rnorm(100))))
b <- ggplot(data=df1, aes(x=x,y=y)) + geom_line(size=df1$lw)

如果我正常显示b,即> b,我会得到正确的情节 enter image description here

但是,如果我输入ggplotly(),我会得到以下情节: enter image description here

使用我的真实数据,结果更糟。以下是plot(),这是正确的,后跟ggplotly() enter image description here

enter image description here

知道如何正确显示这个吗?

1 个答案:

答案 0 :(得分:11)

虽然这是由于故事中的错误引起的(请参阅来自takje的评论),但您可以通过将您的绘图视为具有多个宽度的单个行,但将多个线段(每个都具有固定宽度)视为处理此错误。

首先,设置数据:

library(ggplot2)
library(plotly)
set.seed(123)
df1 <- as.data.frame(list('x'=1:100,'y'=1:100,'lw'=abs(rnorm(100))))

现在我们构建一个新的数据框,其中包含每个线段的起点和终点。即第n个线段从(x_n,y_n)变为(x_n + 1,y_n + 1)。以下代码中的重复()是因为中间点形成一个段的端点,也是下一个段的起点。整个集合的第一个和最后一个点不会重复,因为它们只出现在一个线段中:

x2 <- c(df1$x[1], rep(df1$x[2:(NROW(df1)-1)], each=2),  df1$x[NROW(df1)])
y2 <- c(df1$y[1], rep(df1$y[2:(NROW(df1)-1)], each=2),  df1$y[NROW(df1)])
df2 <- data.frame(x2,y2)

接下来,我们用segnum标签标记每个x和y坐标,该标签指的是它们所在的线段:

df2$segnum <- rep(1:(NROW(df1)-1), each=2)

和另一个与这些段号对应的向量,并包含每个段的行宽:

df2$segw <- rep(df1$lw[1:(NROW(df1)-1)], each=2)

和情节:

ggplot(data=df2, aes(x=x2,y=y2, colour=segnum)) + geom_line(aes(group = segnum, size=segw))

enter image description here

同样在剧情中:

ggplotly()

enter image description here