ggplotly没有正确显示geom_line

Ada*_*m_G 9 plot r 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)
Run Code Online (Sandbox Code Playgroud)

如果我b正常显示,即> b得到正确的情节 在此输入图像描述

但是,如果我进入ggplotly(),我会得到以下情节: 在此输入图像描述

使用我的真实数据,结果更糟.下面是a plot(),这是正确的,接下来是ggplotly() 在此输入图像描述

在此输入图像描述

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

dww*_*dww 11

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

首先,设置数据:

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

现在我们构造一个新的数据框,其中包含每个线段的起点和终点.即第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)
Run Code Online (Sandbox Code Playgroud)

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

df2$segnum <- rep(1:(NROW(df1)-1), each=2)
Run Code Online (Sandbox Code Playgroud)

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

df2$segw <- rep(df1$lw[1:(NROW(df1)-1)], each=2)
Run Code Online (Sandbox Code Playgroud)

和情节:

ggplot(data=df2, aes(x=x2,y=y2, colour=segnum)) + geom_line(aes(group = segnum, size=segw))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

同样在剧情中:

ggplotly()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述