javascript - 通过单击堆叠的条形图打开选项卡

标签 javascript r ggplot2 plotly r-plotly

我正在使用 R、ggplot 和 plotly 构建一个包含转发的堆叠条形图。如果单击条形图的一部分,我希望打开一个新的浏览器选项卡并显示来自该特定日期的推文以及指定的转发数量。但是,当我单击下面示例中的其中一个栏时,会打开一个不同的链接,这表明 url 没有与这些栏正确连接。我该如何解决这个问题?
我以前从未工作过,甚至从未见过 JavaScript,所以答案很可能就在那里。该 plotly 最终将出现在 Shiny 应用程序中。

library(rtweet)
library(ggplot2)
library(plotly)

# Get tweets
tweets <- get_timeline("BBC", n = 10)

# Create dataframe
data <- data.frame("retweet_count" = tweets$retweet_count,
                   "week" =  c(1,1,1,2,2,3,4,5,5,6),
                   "url"  =  tweets$status_url)

# Create ggplot
ggplot(data = data,
           aes(x = week,
           y = retweet_count,
           label = url)) + 
  geom_bar(stat = 'sum', 
           fill = "darkblue")

# Convert to plotly
p <- ggplotly(
  p,
  tooltip = c("y", 'label'))

# Add URL data to plot
p$x$data[[1]]$customdata <- data$url

# JS function to make a tab open when clicking on a specific bar
onRender(
  p,
  "
    function(el,x){
    el.on('plotly_click', function(d) {
    var websitelink = d.points[0].customdata;
    window.open(websitelink);
    });
    }
    ")

最佳答案

我没有 Twitter 帐户,所以我更改了您的数据集以使用一些 Wikipedia 文章。
您的问题可以通过重新订购 data.frame 来解决。根据网址。如果您使用来自 1:9 的文章运行以下命令一切都按预期工作。一旦您切换到带有链接的数据集 9:1你会得到错误的链接。 Plotly 似乎在内部重新排序 - 与 here 相同的逻辑.
在您的情况下:data <- data[order(data$url),]应该修复订单。
以下工作正常:

# library(rtweet)
library(ggplot2)
library(plotly)
library(htmlwidgets)

# Get tweets
# tweets <- get_timeline("BBC", n = 10)

# Create dataframe
# data <- data.frame("retweet_count" = tweets$retweet_count,
#                    "week" =  c(1,1,1,2,2,3,4,5,5,6),
#                    "url"  =  tweets$status_url)

# Create dataframe
# Works!
data <- data.frame("retweet_count" = 1:9,
                   "week" =  1:9,
                   "url"  =  paste0(c("https://en.wikipedia.org/wiki/166"), 1:9))
# Doesn't work!
# data <- data.frame("retweet_count" = 9:1,
#                    "week" =  9:1,
#                    "url"  =  paste0(c("https://en.wikipedia.org/wiki/166"), 9:1))

# Create ggplot
p <- ggplot(data = data,
       aes(x = week,
           y = retweet_count,
           label = url)) + 
  geom_bar(stat = 'sum', 
           fill = "darkblue")

# Convert to plotly
p <- ggplotly(
  p,
  tooltip = c("y", 'label'))

# Add URL data to plot
p$x$data[[1]]$customdata <- data$url

# JS function to make a tab open when clicking on a specific bar
onRender(
  p,
  "
    function(el,x){
    el.on('plotly_click', function(d) {
    var websitelink = d.points[0].customdata;
    window.open(websitelink);
    });
    }
    ")

关于javascript - 通过单击堆叠的条形图打开选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64502622/

相关文章:

javascript - 如何在nodejs中的多个文件之间共享变量

javascript - 通过 ReduxReducer 中的键附加到数组访问

r - 在导出为 .csv 文件之前加入两个数据框

r - 如何使用 ggplot2 for geom_pointrange() 类型图形获取图例键中的垂直线

r - 更改 ggplot2 中单个方面的文本颜色

javascript - 查看未从指令功能更新

r - 如何从 R 调用存储在 Oracle 数据库上的 PL/SQL 过程

磁悬浮管(%>%)具有不良行为的原因?

r - 使用 ggplot 在饼图中心打洞

javascript - 在排序的整数数组中查找范围的最大大小