Plotly R 突出显示问题:当我点击一个栏时,突出显示看起来错误

Posted

技术标签:

【中文标题】Plotly R 突出显示问题:当我点击一个栏时,突出显示看起来错误【英文标题】:Plotly R Highlight Problem: When I Click on a Bar, the Hightlighting Looks Wrong 【发布时间】:2022-01-04 09:35:54 【问题描述】:

我正在尝试在我的绘图中添加一个功能,以便有人可以单击一个栏并突出显示它。但是,当我尝试添加此功能时,我只能单击该栏并突出显示其中的一小部分(见下图)。我尝试在此post 中实施建议,但无济于事。将不胜感激。

这是我的代码:

number_of_debates_from_1803_1910 <- fread("~/projects/hansard-shiny/app-data/introduction/number_of_debates_from_1803_1910.csv")
  
  number_of_debates_from_1803_1910 %>%
    highlight_key() %>%
    plot_ly(
          x = ~decade, 
          y = ~no_of_debates, 
          type = 'bar', 
          text = ~paste0("Decade: ", "<b>", decade, "</b>", "\n",
                         "Number of Debates: ", "<b>", no_of_debates, "</b>", "\n"),
          hoverinfo = "text",
          marker = list(color = 'rgb(158,202,225)',
                        line = list(color = 'rgb(8,48,107)',
                                    width = 1.5))) %>% 
    highlight(on = "plotly_click", off = "plotly_doubleclick") %>%
    layout(barmode = "overlay"),
           xaxis = list(title = ""),
           yaxis = list(title = "")) %>%
    config(displayModeBar = F) 

这是我的数据:

decade,no_of_debates
1800,926
1810,2435
1820,2400
1830,7848
1840,7398
1850,8835
1860,10660
1870,14051
1880,31509
1890,31857
1900,49725
1910,5631

如果您愿意,也可以按以下方式访问:

structure(list(decade = c(1800L, 1810L, 1820L, 1830L, 1840L,  1850L), no_of_debates = c(926L, 2435L, 2400L, 7848L, 7398L, 8835L )), row.names = c(NA, -6L), class = c("data.table", "data.frame" ))

点击条形之前的绘图图片:

点击条形图后的图片:

【问题讨论】:

请通过发布dput(head(number_of_debates_from_1803_1910))的输出分享您的数据。 这是您要查看的输出? structure(list(decade = c(1800L, 1810L, 1820L, 1830L, 1840L, 1850L), no_of_debates = c(926L, 2435L, 2400L, 7848L, 7398L, 8835L )), row.names = c(NA, -6L), class = c("data.table", "data.frame" ), .internal.selfref = &lt;pointer: 0x5632c3fc2450&gt;) 没错 - 这让其他人更容易复制您的数据。对于 data.table,您需要删除 .internal.selfref 我不确定我是否理解删除 .internal.selfref 的目的。我尝试将 csv 加载为数据框,以避免可能与 data.table 相关的问题,但是当我单击它时,我的图也有同样的问题。 但是谢谢你的复制数据提示。 【参考方案1】:

你真的很接近你的问题的解决方案。无论出于何种原因,class 对于您突出显示的数据都很重要。例如,在您的数据中,decade 的类是int,但是,它需要是factor。解决这个问题很简单

number_of_debates_from_1803_1910$decade <- as.factor(number_of_debates_from_1803_1910$decade)

number_of_debates_from_1803_1910 %>%
  highlight_key(~decade) %>%
  plot_ly(
    x = ~decade, 
    y = ~no_of_debates, 
    type = 'bar', 
    text = ~paste0("Decade: ", "<b>", decade, "</b>", "\n",
                   "Number of Debates: ", "<b>", no_of_debates, "</b>", "\n"),
    hoverinfo = "text",
    marker = list(color = 'rgb(158,202,225)',
                  line = list(color = 'rgb(8,48,107)',
                              width = 1.5))) %>% 
  highlight(~decade, on = "plotly_click",off = "plotly_doubleclick") %>%
  layout(barmode = "overlay")

【讨论】:

非常感谢。我没有意识到数据类型在这里如此重要!

以上是关于Plotly R 突出显示问题:当我点击一个栏时,突出显示看起来错误的主要内容,如果未能解决你的问题,请参考以下文章

plotly:单击图例中的点时突出显示(暗淡),而不是过滤

突出显示 plotly.js boxplot 中的一个值

当我点击导航栏时,来自栏按钮的 ios 操作表不会关闭

Plotly:在散点图中的数据点上显示列值

当我点击带有动画的搜索栏时,iOS隐藏导航栏

如何通过点击身体图像iOS来突出显示人体部位?