ggplotly 没有正确显示 geom_line

ggplotly not displaying geom_line correctly

我正在尝试使用 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,我会得到一个正确的图

但是,如果我随后输入 ggplotly(),我会得到下面的图:

使用我的真实数据,结果更差。下面是一个plot(),是正确的,后面是ggplotly()

知道如何正确显示吗?

虽然这是由 plotly 中的一个错误引起的(请参阅 takje 的评论),但您可以通过将您的绘图不视为具有多种宽度的单线,而是将许多线段视为具有固定宽度的线段来解决此错误宽度。

首先,设置数据:

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

现在我们构建一个新的数据框,其中包含每条线段的起点和终点。 IE。第 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))

也在剧情中:

ggplotly()