我已经写了下面的地方,我有一个在背景中的图像(必要的)和一些数据点:

library(plotly)
library(ggplot2)
library(lorem)

df <- data.frame(
  id = 1:50,
  value = rnorm(50)
)

# background image (necessary)
image_destination <- "https://i.imgur.com/ojTcMtN.jpeg"

gg <- ggplot(df,
             aes(x = id,
                 y = value,
                 text = ipsum_words(50, collapse = F) 
             )
) +
  geom_point(color = "red", alpha = 0.5, size = 5) +
  theme_bw()


# create plot
pp <- ggplotly(gg,
               tooltip = c("text"))

# display plot
plotly::layout(pp,
               # tooltip = c("text"),
               images = list(
                 list(
                   source =  image_destination,
                   xref = "x",
                   yref = "y",
                   x = 0,
                   y = 2,
                   sizex = 100,
                   sizey = 4,
                   sizing = "stretch",
                   opacity = 1,
                   layer = "below"
                 )
               ))

有没有办法操纵plotly,使geom_pointincreasesmouse over中的size(例如,从目前的5号增加到10号)?

推荐答案

您可以使用docs中概述的两个自定义事件处理程序来实现所需的结果.使用plotly_hover事件可以增加悬停点的大小,使用plotly_unhover可以将其设置回默认大小.在这两种情况下,这都是使用Plotly.restyle实现的.但是,使用Plotly.restyle,我们只能设置或更改轨迹的标记样式.因此,要为一个点设置标记样式,需要将每个点视为单个轨迹.为此,我在ggplot()中的coloraes上映射了factor(id).因为这将添加一个 colored颜色 图例,所以我在layout中添加了showlegend = FALSE个,因为plotly没有考虑到设置guide="none".最后,由于用于大小的单位不同于ggplot2,因此在中获取或设置正确的大小需要转换ggplot2大小,这可以使用Size_in_mm * 96 / 25.4来实现

注意:由于图像部分与问题无关,我将其删除以使示例更简洁.

library(plotly)
library(ggplot2)
library(lorem)

set.seed(123)

df <- data.frame(
  id = 1:50,
  value = rnorm(50),
  text = ipsum_words(50, collapse = FALSE)
)

gg <- ggplot(
  df,
  aes(
    x = id,
    y = value,
    text = text,
    color = factor(id)
  )
) +
  geom_point(alpha = 0.5, size = 5) +
  scale_color_manual(
    values = rep("red", nrow(df)), guide = "none"
  ) +
  theme_bw()


# create plot
pp <- ggplotly(gg,
  tooltip = c("text")
)

# display plot
pp <- plotly::layout(pp,
  showlegend = FALSE
) 

pp |>
  htmlwidgets::onRender("
    function(el) {
      el.on('plotly_hover', function(data) {
        console.log(data);
    
        var pn='',
            tn='',
            colors=[];
        
        for(var i=0; i < data.points.length; i++){
          pn = data.points[i].pointNumber;
          tn = data.points[i].curveNumber;
          colors = data.points[i].data.marker.color;
        };
        var size = 10 * 96 / 25.4;
    
        var update = {'marker':{color: colors, size: size, opacity: 1}};
        Plotly.restyle(el.id, update, [tn]);
      });
      el.on('plotly_unhover', function(data) {
        var pn='',
            tn='',
            colors=[];
        
        for(var i=0; i < data.points.length; i++){
          pn = data.points[i].pointNumber;
          tn = data.points[i].curveNumber;
          colors = data.points[i].data.marker.color;
        };
        var size = 5 * 96 / 25.4;
    
        var update = {'marker':{color: colors, size: size, opacity: .5}};
        Plotly.restyle(el.id, update, [tn]);
      });
    }
  ")

enter image description here

R相关问答推荐

是否可以 Select 安装不带文档的R包以更有效地存储?

带有gplot 2的十字舱口

如何使用rmarkdown和kableExtra删除包含折叠行的表的第一列的名称

判断字符串中数字的连续性

通过使用str_detect对具有相似字符串的组进行分组

如何在modelsummary中重命名统计数据?

计算具有奇数日期的运行金额

使用较长的查询提取具有部分匹配的列表中的较短目标,

将. xlsx内容显示为HTML表

根据现有列的名称和字符串的存在进行变异以创建多个新列

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

将向量元素重新排序为R中的第二个

警告消息";没有非缺失的参数到min;,正在返回数据中的inf";.表分组集

使用geom_iles在一个切片中包含多个值

将摘要图添加到facet_WRAP gglot的末尾

是否有一个R函数可以输出在输入的字符向量中找到的相应正则表达式模式?

在鼠标悬停时使用Plotly更改geom_point大小

R:改进实现简单模型

如何准确地指出Read_delim所面临的问题?

在分面的ggplot2条形图中对条形图进行排序,并省略每组未使用的系数级别