从 ggplot 转换时,plotly 会删除分组图例(按颜色、按符号)

2024-04-30

我不太明白为什么当我转换由ggplot to plotly using ggplotly. The 情节帮助页面 https://plotly.com/ggplot2/legend/没有任何信息。我认为他们的示例在该页面上甚至无法正常工作。 任何帮助是极大的赞赏!

样本数据

library(scales)
packageVersion("ggplot2")
#> [1] '3.4.0'
library(plotly)
packageVersion("plotly")
#> [1] '4.10.1'

data <- data.frame(
  stringsAsFactors = FALSE,
  Level = c("Fast","Fast","Fast","Fast",
            "Fast","Fast","Slow","Slow","Slow",
            "Slow","Slow","Slow"),
  Period = c("1Year","3Month","1Year","3Month",
             "1Year","3Month","1Year","3Month",
             "1Year","3Month","1Year","3Month"),
  X = c(0.002,0.002,0.1,0.1,0.9,0.9,
        0.002,0.002,0.1,0.1,0.9,0.9),
  Y = c(1.38,1.29,1.61,1.61,1.74,0.98,
        1.14,0.97,1.09,1.1,0.94,0.58)
)

ggplot2

plt <- ggplot(data = data,
             aes(x = X,
                 y = Y,
                 shape = Period,
                 color = Level)) +
  geom_point(alpha = 0.6, size = 3) +
  labs(x = " ",
       y = "Value") +
  scale_y_continuous(labels = number_format(accuracy = 0.1)) +
  guides(color = guide_legend(title = "Level", order = 1),
         shape = guide_legend(title = "Period", order = 2)) +
  theme(axis.text.x = element_text(angle = 90))
plt

转换为plotly,传说消失

ggplotly(plt, height = 500) %>%
  layout(xaxis = list(autorange = "reversed"))

Edit

有一个问题guides()。如果我把它去掉,传说中的ggplotly出现

plt2 <- ggplot(data = data,
             aes(x = X,
                 y = Y,
                 shape = Period,
                 color = Level)) +
  geom_point(alpha = 0.6, size = 3) +
  labs(x = " ",
       y = "Value") +
  scale_y_continuous(labels = number_format(accuracy = 0.1)) +
  theme(axis.text.x = element_text(angle = 90))
plt2

ggplotly(plt2, height = 500) %>%
  layout(
    xaxis = list(autorange = "reversed"),
    legend = list(
      title = list(text = '(Period, Level)'))
  )


OP编辑后:

以下是使用基本 R {plotly} 根据 @Tung 的要求修改图例的解决方法:

library(scales)
library(ggplot2)
library(plotly)
library(data.table)

DT <- data.frame(
  stringsAsFactors = FALSE,
  Level = c("Fast","Fast","Fast","Fast",
            "Fast","Fast","Slow","Slow","Slow",
            "Slow","Slow","Slow"),
  Period = c("1Year","3Month","1Year","3Month",
             "1Year","3Month","1Year","3Month",
             "1Year","3Month","1Year","3Month"),
  X = c(0.002,0.002,0.1,0.1,0.9,0.9,
        0.002,0.002,0.1,0.1,0.9,0.9),
  Y = c(1.38,1.29,1.61,1.61,1.74,0.98,
        1.14,0.97,1.09,1.1,0.94,0.58)
)

setDT(DT)

LevelDT <- unique(DT, by = "Level")
PeriodDT <- unique(DT, by = "Period")
LevelDT[, Y := min(DT$Y)-1]
PeriodDT[, Y := min(DT$Y)-1]

plt2 <- ggplot(data = DT,
               aes(x = X,
                   y = Y,
                   shape = Period,
                   color = Level)) +
  geom_point(alpha = 0.6, size = 3) +
  labs(x = " ",
       y = "Value") +
  scale_y_continuous(labels = number_format(accuracy = 0.1)) +
  theme(axis.text.x = element_text(angle = 90))
plt2

markercolors <- hue_pal()(2)

ggplotly(plt2, height = 500) |>
  layout(
    xaxis = list(autorange = "reversed"),
    legend = list(
      title = list(text = ''),
      itemclick = FALSE,
      itemdoubleclick = FALSE,
      groupclick = FALSE
    )
  ) |>
  add_trace(
    data = LevelDT,
    x = ~ X,
    y = ~ Y,
    inherit = FALSE,
    type = "scatter",
    mode = "markers",
    marker = list(
      color = markercolors,
      size = 14,
      opacity = 0.6,
      symbol = "circle"
    ),
    name = ~ Level,
    legendgroup = "Level",
    legendgrouptitle = list(text = "Level")
  ) |>
  add_trace(
    data = PeriodDT,
    x = ~ X,
    y = ~ Y,
    inherit = FALSE,
    type = "scatter",
    mode = "markers",
    marker = list(
      color = "darkgrey",
      size = 14,
      opacity = 0.6,
      symbol = c("circle", "triangle-up")
    ),
    name = ~Period,
    legendgroup = "Period",
    legendgrouptitle = list(text = "Period")
  ) |> style(showlegend = FALSE, traces = 1:4)

PS: Here https://github.com/plotly/plotly.js/issues/5099可以找到相关的plotly.js GitHub问题。


原答案:

我不知道为什么他们被设置为FALSE首先,但设置showlegend = TRUE in layout() and style()(寻找痕迹)带回传说:

library(scales)
library(ggplot2)
library(plotly)

data <- data.frame(
  stringsAsFactors = FALSE,
  Level = c("Fast","Fast","Fast","Fast",
            "Fast","Fast","Slow","Slow","Slow",
            "Slow","Slow","Slow"),
  Period = c("1Year","3Month","1Year","3Month",
             "1Year","3Month","1Year","3Month",
             "1Year","3Month","1Year","3Month"),
  X = c(0.002,0.002,0.1,0.1,0.9,0.9,
        0.002,0.002,0.1,0.1,0.9,0.9),
  Y = c(1.38,1.29,1.61,1.61,1.74,0.98,
        1.14,0.97,1.09,1.1,0.94,0.58)
)

# ggplot2
plt <- ggplot(data = data,
              aes(x = X,
                  y = Y,
                  shape = Period,
                  color = Level)) +
  geom_point(alpha = 0.6, size = 3) +
  labs(x = " ",
       y = "Value") +
  scale_y_continuous(labels = number_format(accuracy = 0.1)) +
  guides(color = guide_legend(title = "Period", order = 1),
         shape = guide_legend(title = "", order = 2)) +
  theme(axis.text.x = element_text(angle = 90))
plt

# Convert to plotly, legend disappeared
fig <- ggplotly(plt, height = 500) %>%
  layout(showlegend = TRUE, xaxis = list(autorange = "reversed")) %>%
  style(showlegend = TRUE)
fig
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 ggplot 转换时,plotly 会删除分组图例(按颜色、按符号) 的相关文章

  • 如何动态地将 sliderInput 添加到闪亮的应用程序中?

    使用闪亮 我上传一个 csv 文件 并根据列名称 我需要向 ui 添加滑块 sidebarPanel fileInput file1 Upload CSV File to Create a Model accept c text csv t
  • R 中 SVG 图形的最佳设备? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想从 R 导出 SVG 图形 似乎有两种选择 RSvgDevice 和 Cairo 有人可以对这些包发表评论吗 是默认的还是明显比另一个
  • 无法编译包“maps”

    当我安装 maps 包时 安装中出现警告 ld warning ignoring file Library Developer CommandLineTools SDKs MacOSX10 14 sdk usr lib libSystem
  • 我如何查看 quantmod 包中所有可用的数据系列?

    如何显示可用的所有报价 数据系列的列表 例如使用雅虎的 getSymbols 我不知道有什么办法 TTR包有一个功能 stockSymbols 下载 NYSE AMEX 和 NASDAQ 的所有当前代码 它试图将它们采用雅虎可接受的格式 但
  • 更改 R 中 ggplot geom_polygon 的颜色方案

    我正在使用地图库和 ggplot 的 geom polygon 创建地图 我只是想将默认的蓝色 红色 紫色配色方案更改为其他颜色 我对 ggplot 非常陌生 所以如果我没有使用正确的数据类型 请原谅 我使用的数据如下所示 gt head
  • 条件和分组 mutate dplyr

    假设我有以下每个抽屉库存增加的数据 gt socks year drawer nbr sock total 1990 1 2 1991 1 2 1990 2 3 1991 2 4 1990 3 2 1991 3 1 我想要一个二进制变量来标
  • 在 RGL 中将立方体绘制到 3D 散点图中

    我正在尝试向 3D 散点图添加较小的立方体 网格 具有指定边长 我希望立方体位于原点 我该怎么做呢 我已经玩过cube3d 但我似乎无法将立方体正确定位 也无法使其成为网格 因此我可以看到它包含的数据点 这是我所拥有的 library rg
  • R:改变堆积条形图的颜色

    library ggplot2 df2 lt data frame supp rep c VC OJ each 3 dose rep c D0 5 D1 D2 2 len c 6 8 15 33 4 2 10 29 5 head df2 g
  • 更改绘图区域背景颜色

    我想使用我们公司的颜色在 R 中制作一个图表 这意味着所有图表的背景应为浅蓝色 但绘图区域应为白色 我正在寻找答案 发现绘制一个矩形就可以完成这项工作 几乎 然而 绘图区域现在是白色的 并且图形不再可见 这可能吗 getSymbols SP
  • 更改ggplot2中的字体

    曾几何时 我改变了我的ggplot2字体使用windowsFonts Times windowsFont TT Times New Roman 现在 我无法摆脱这一切 在尝试设置family in ggplot2 theme 当我用不同的字
  • 识别包含字符串的行的最快方法[重复]

    这个问题在这里已经有答案了 我有一个字符串数据框 尺寸为 30 列 x 500 万行 我想识别包含任何预定义字符串列表的行 有没有比下面我的 apply any 方法更快的方法 这是一个可重现的示例 请注意 此示例中的字符串是随机数 但在我
  • ggplot 的每个方面都有不同的 `geom_hline()`

    这个问题在这里已经有答案了 library tidyverse ggplot mpg aes cty hwy geom point facet grid year fl geom hline yintercept mean mpg hwy
  • 上传到 Shiny 服务器后在 R 中解压文件

    我正在尝试在我们的本地服务器上使用 Shiny 来构建一个应用程序 允许用户上传包含 ESRI shapefile 和关联文件的 zip 文件 Shiny 服务器的 fileInput 可以获取数据 并且当它这样做时 它会将其存储在临时目录
  • 使用操作按钮在闪亮的 R 中添加包含现有数据框的新行

    我正在构建一个闪亮的表单 它将从 textInput 字段获取数据 并将这些输入与文本文件 将通过文件输入上传 组合起来 并在主面板中显示输出 有一个操作按钮用于第一次更新数据 从文本输入中获取数据并与处理后的文本文件合并 我添加了另一个操
  • 如何使用 ggplot2 将 IPCC 点画添加到全球地图

    我需要将 IPCC style 点画添加到全球地图中 如下所示这个帖子 https stackoverflow com questions 11736996 adding stippling to image contour plot 不过
  • 聚合函数在数据框中创建不需要的向量

    我在函数中创建数据帧时遇到了一个奇怪的问题 但是 在 data frame 之外使用相同的方法效果很好 这是基本函数 我用它来计算数据集的平均值 标准差和标准误差 aggregateX lt function formula dataset
  • 使用 dplyr 对连续变量进行分类[重复]

    这个问题在这里已经有答案了 我想基于连续数据创建一个具有 3 个任意类别的新变量 set seed 123 df lt data frame a rnorm 100 使用基地我会 df category df a lt 0 5 lt low
  • autoplot.microbenchmark 实际绘制了什么?

    根据文档 microbenchmark autoplot 使用 ggplot2 生成更清晰的微基准计时图 凉爽的 让我们尝试一下示例代码 library ggplot2 tm lt microbenchmark rchisq 100 0 r
  • 函数速度测试的奇怪结果

    我编写了一个使用递归来查找最大公因数 分母 的函数 gt gcd function a b if length a length b gt 1 warning Only scalars allowed using first element
  • ggplot2 的 fortify 函数出错

    我在 ggplot2 中使用 fortify 方法时收到此错误 Error in function classes fdef mtable unable to find an inherited method for function pr

随机推荐

  • Spring Security Ldap,仅登录指定组中的用户

    就像标题一样 我希望只有规范的用户 这是我的验证码 public void configureGlobal AuthenticationManagerBuilder auth throws Exception auth ldapAuthen
  • 安全沙箱违规

    运行我的 Flash 应用程序时出现以下错误 违反安全沙箱 与 rtmp system ip live 的连接已停止 不允许从 file F Flash 工作 RTS RT vlab BIOTECH NEO 简单神经元的被动属性 vi 特征
  • Google API 控制台 - 缺少客户端密钥

    我尝试为 Android 应用程序创建一个测试客户端 ID 该应用程序使用 OAUTH 2 0 作为检索用户配置文件的登录名 我按照步骤在谷歌控制台上完成了客户端 ID 的创建 但我没有在任何地方看到客户端密钥 我正在尝试帮助我的雇主获取其
  • catch 块和方法中的 throw new Exception 之间的区别

    在一种方法中 我希望能够将一个值插入到 div 中 该 div 是我选择解析的 html 文档的一部分 public void AddToDiv string div Code to read the html document and l
  • 使用带有 _O_U8TEXT 的 setmode 处理 unicode 时 C++ 崩溃

    我尝试打印 unicode 的是 setmode fileno stdout O U8TEXT string str u8 unicode hangul cout lt lt str lt lt endl 我使用 setmode 来正确显示
  • 如何打印/存储非 ASCII 字符(unicode?)

    我正在阅读大量的音乐家档案 其中许多艺术家的名字中都有奇怪的字符 因为他们可能来自德国或其他一些具有非 ASCII 字符的国家 我希望能够将这些音乐家的名字存储在列表中并将它们打印到控制台 如何打印从文本文件读入的带有奇怪字符的字符串 让我
  • 我们可以通过编程方式访问 iOS 系统设置的常规/辅助功能/字幕和字幕吗?

    我必须使用 iOS 设置应用程序中的字幕和字幕系统设置 有什么办法 我们可以通过编程来获取它 您可以使用 UIAccessibilityIsClosedCaptioningEnabled 方法来了解 iOS 设置 gt 常规 gt 辅助功能
  • 删除 Eclipse 图形布局中的 Android 状态栏

    如何删除 Eclipse 图形布局中 android 模拟器的状态栏 我的应用程序设置为以全屏模式运行 但我在布局方面遇到了困难 因为状态栏出现在 Eclipse 的图形布局中 您只需更改下拉列表中的主题 或者用 Android 术语来说可
  • 使内容适合 div 的宽度

    如何使文本适合 div 的宽度 这是我的代码 div class column a href class user thumbnail img src width 100px height 100px a span class name t
  • ImageMagick - 向图像添加白色透明覆盖层

    我需要拍摄一张正常的图像 并添加白色透明覆盖层 使其看起来像这样 不要注意转换后图像上的文本或它是原始图像的裁剪版本这一事实 我需要简单地将顶部转换为完全相同的图像 只是使用白色透明的覆盖层 我还需要它是一个 cli 命令 更新答案 这更容
  • 如何在Sql Server 2008全文搜索中忽略html标签

    我正在使用 SQL Server 2008 全文搜索引擎开发一个知识库项目 项目包含在文章和文件中 其中每篇文章都有多个文件 在这些文章中 全部内容是纯html 现在 我在 SQL Server 2008 上成功创建了全文目录和索引 并且我
  • Python sched.scheduler 超过最大递归深度

    我最近开始学习 Python 我正在制作的简单应用程序的一部分包括一个在其自己的线程中运行的带有 hh mm ss 显示的计时器 环顾网络 我发现了两种实现此目的的方法 使用 sched scheduler 使用threading Time
  • 创建自定义 BigDecimal 类型

    在我的应用程序中 所有 BigDecimal 数字都被缩放为具有两位小数 换句话说 每次我在代码中创建一个新的 BigDecimal 时 我也需要使用方法scale BigDecimal x BigDecimal ZERO x setSca
  • 如何在 Rails Admin 中隐藏添加新选项

    我正在自定义 Rails Admin https github com sferik rails admin https github com sferik rails admin 我需要禁用 隐藏某些型号的 添加新 选项 任何帮助都会为我
  • Python:使用html解析器提取特定数据

    我开始使用 Python 中的 HTMLParser 从网站中提取数据 我得到了我想要的一切 除了两个 HTML 标签内的文本 以下是 HTML 标签的示例 a href http wold livingsources org vocabu
  • 当我在 Excel 中运行宏时标题被切断

    我在主电子表格中设置了一个标题 在其中运行不同的宏以对信息进行不同的排序 当我运行宏时 标题的底部部分被切断 我的标题确实包含图像 不确定这是否与之有关 我还在所有宏中运行以下代码部分来格式化第一行信息 Rows 1 1 WrapText
  • 将日期时间转换为时间跨度

    我想转换一个DateTime实例化为TimeSpan举例来说 可能吗 我环顾四周 但找不到我想要的东西 我只找到了时差 更具体地说 我想转换DateTime实例以毫秒为单位 然后将其保存到IsolatedStorage 中 您可以只使用日期
  • Smalltalk 和 IoC

    我看到很多 Net 和 Java 的 IoC 框架 有谁知道为什么 Smalltalk 没有等效的框架 这更像是一个哲学问题 我想知道 Smalltalk 的做事方式中是否有某些东西排除了 IoC 框架的必要性 MVC http en wi
  • 更改 Word 文档的页边距

    我创建了一个带有按钮的 Web 部件 单击该按钮后会生成一个包含特定列表的列表项值的 Word 文档 我希望能够更改文档的边距 顶部 底部边距 但我不确定如何继续 谁能阐明如何实现这一目标 到目前为止 我的代码如下 void Generat
  • 从 ggplot 转换时,plotly 会删除分组图例(按颜色、按符号)

    我不太明白为什么当我转换由ggplot to plotly using ggplotly The 情节帮助页面 https plotly com ggplot2 legend 没有任何信息 我认为他们的示例在该页面上甚至无法正常工作 任何帮