如何在绘图中使用多个组,但仅使用定义数量的图例组

2024-02-03

假设我有多个不同细胞的时间序列,我可以根据它们是否接受治疗来分割它们 - 我如何绘制所有单独的时间序列(不平均),但根据绘图中的治疗对它们进行分组?

它与 ggplot 完美配合 - 我知道我可以从那里使用 ggplotly - 但有完整的情节方式吗?

以下是一些虚拟数据:

library("dplyr")
library("plotly")

cell <- c(rep("a", 10), rep("b", 10),  rep("c", 10),  rep("d", 10),  rep("e", 10), rep("f", 10))
group <- c(rep("Untreated", 10), rep("Treated", 30), rep("Unknown", 20))
time <- rep(1:10, times=6)
value <- c(runif(60))

df <- data.frame(cell, group, time, value)



# I want this in plotly:
ggplot(df, aes(x=time, y=value, group=cell, color=group)) +
  geom_line()


# For many "cells" this will explode the legend (my real data have hundreds of cells)
plot_ly(df, x=~time, y=~value, split=~cell, color=~group,
        type="scatter", mode="line")


# This works but it connects the last and the first timepoint
plot_ly(df, x=~time, y=~value, group=~cell, color=~group,
        type="scatter", mode="line")

I need this: ggplot

But plotly gives me this (too many legendgroups for many cells): Plotly1

Or this (it connects start and end of individual cells): Plotly2

有没有什么办法可以用plotly 来做到这一点——或者我需要使用ggplotly 吗?

Edit:

  • 新的和扩展的虚拟数据
  • 新地块

您可以使用legendgroup并通过隐藏重复的跟踪名称showlegend.

另请参阅:https://plotly.com/r/legend/#grouped-legend https://plotly.com/r/legend/#grouped-legend

Edit:@JulianStopp修改示例数据后: 这是寻找隐藏在图例中的痕迹的通用方法。抱歉切换到data.table但我不熟悉dplyr:

library(data.table)
library(plotly)

cell <- c(rep("a", 10), rep("b", 10),  rep("c", 10),  rep("d", 10),  rep("e", 10), rep("f", 10))
group <- c(rep("Untreated", 10), rep("Treated", 30), rep("Unknown", 20))
time <- rep(1:10, times=6)
value <- c(runif(60))

DF <- data.frame(cell, group, time, value)

setDT(DF)
setorder(DF, group, cell, time)
showlegendDF <- DF[, .SD[1], by = .(group, time), .SDcols = c("cell")][, showlegend := TRUE] # find first trace for each group

DF <- showlegendDF[DF, on = c("group", "cell", "time")] # join
DF[, i := .GRP, by = .(group, cell)] # create trace indices
# set(DF, which(is.na(DF[["showlegend"]])), "showlegend", FALSE) # replace NAs with FALSE

plot_ly(DF, x=~time, y=~value, split=~cell, legendgroup = ~group, name = ~group, color = ~group,
        type="scatter", mode="line") %>% style(showlegend = FALSE, traces = unique(DF[is.na(showlegend), i]))

初步回答:

library("dplyr")
library("plotly")

cell <- c(rep("a", 10), rep("b", 10),  rep("c", 10))
group <- c(rep("Untreated", 10), rep("Treated", 20))
time <- c(seq(1:10), seq(1:10), seq(1:10))
value <- c(runif(30))

df <- data.frame(cell, group, time, value)

plot_ly(df, x=~time, y=~value, split=~cell, legendgroup = ~group, name = ~group, color = ~group,
        type="scatter", mode="line") %>% style(showlegend = FALSE, traces = 2)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在绘图中使用多个组,但仅使用定义数量的图例组 的相关文章

  • 使用 R 迭代读取、操作多个 Excel 文件并将它们附加到一个数据帧中

    在一个目录下 我有多个具有相似格式的excel文件 您可以从以下位置下载示例文件 here https www dropbox com s ho3visres55kpoy test zip dl 0 我需要 循环文件和read excel
  • 从 foreach 循环赋值

    我想并行化一个循环 例如 td lt data frame cbind c rep 1 4 2 rep 1 5 rep 1 10 2 names td lt c val id res lt rep NA NROW td for i in l
  • 当按多列分组时,如何命名 dplyr 中的 group_split 列表

    我在 dplyr 中使用 group split 在分割了多个列后 我很难命名列表 当我们按一列分组时 我知道该怎么做here https stackoverflow com questions 57107721 how to name t
  • R 中有没有快速替换列值的方法?

    假设我们有一个包含数值的数据框 如下所示 Temperature Height 32 157 31 159 33 139 我想更换Height价值观与pic 00001 pic 00002等等 最终结果是 Temperature Heigh
  • 使用 ggplot_build 和 ggplot_gtable 后使用 ggsave 保存图形

    我正在通过更改 ggplot build 生成的数据来修改使用 ggplot 构建的图表 原因类似于包括 geom boxplot 中填充美学中使用的缺失因子水平的空间 https stackoverflow com questions 1
  • 使用 gbuffer 在 R 中缓冲(地理)空间点

    我正在尝试缓冲数据集中半径为 100 公里的点 我正在使用该功能gBuffer从包装中rgeos 这是我到目前为止所拥有的 head sampledf postalcode lat lon city province 1 A0A0A0 47
  • 使用facet时ggplot2控制每行的面板数量?

    Is it possible to control the number of panels per row in a ggplot I can only get an equal number of panels on each row
  • 使用 Rcpp 得出斐波那契数列的意外结果

    我刚刚开始使用Rcpp很抱歉 如果我错过了一个简单的步骤或类似的东西 我已经尝试过这个 sourceCpp library Rcpp sourceCpp code include
  • 在knitr中打印漂亮的交叉表

    我想要的是使用 R Markdown 和 knit 从 RStudio 打印漂亮的交叉表 无论是在 pdf 文件中 还是在 html 文件中 我怀疑我错过了一些非常明显的东西 因为我不敢相信这是如此困难 我使用 xtabs 或 ftable
  • 为什么安装的“igraph”包在加载后返回“libicui18n.so.58:无法打开共享对象文件”?

    我试图使用命令 install packages igraph 在 R 中安装 igraph 包 安装后 在测试阶段出现以下错误 测试是否可以加载已安装的包错误 包或命名空间 dyn load file DLLpath DLLpath 中的
  • 使用列表中的数据框:删除变量,添加新变量

    定义一个列表dats有两个数据框 df1 and df2 dats lt list df1 data frame a sample 1 3 b sample 11 13 df2 data frame a sample 1 3 b sampl
  • 从 Cox PH 模型预测概率

    我正在尝试使用 cox 模型来预测时间 称为停止 3 后失败的概率 bladder1 lt bladder bladder enum lt 5 coxmodel coxph Surv stop event rx size number cl
  • 在R中绘制3x3方形网格

    我得到了一个数字列表 n 9 想将它们画在一个 3 3 的正方形网格中 每个网格填充相应的数字 我如何在 R 中执行此操作而不安装额外的软件包 例如情节 非常感谢 这里有一个ggplot解决方案比我预期的要难一点 Setup the dat
  • R 的 dplyr 切片中的奇怪行为

    打电话时slice df i 在 R 的 dplyr 包中 如果我要求的行索引不存在 nrows lt i 它似乎返回除组中的第一行之外的所有行 就像我调用的那样slice df 1 例如 library dplyr c1 lt c a b
  • R markdown 引文标识符

    R markdown 允许使用 YAML 元数据部分中的参考书目元数据字段指定参考书目文件 例如 title Sample Document output html document bibliography bibliography bi
  • 如何更改 Quarto pptx 中的字体格式

    我正在 R 中使用 Quarto 创建 pptx 要更改我尝试更改的默认字体格式mainfont范围 但是当我渲染它时 最终的 pptx 文件具有默认字体 Calibri 这是我的文件 YAML 将 Quarto 文件渲染为 pptx 时如
  • 自动将变量名称添加到列表的元素[重复]

    这个问题在这里已经有答案了 我有一个模型列表 为了使代码更易于维护 因此可以方便地添加和删除模型 我希望有一个地方来存储它们及其名称 为此 我必须解决以下命名问题 上游 我生成模型的方式比以下方式效率低 如果是这样压缩的 我会assign他
  • 为格子中的每个面板添加不同的独特标签

    很清楚如何在格子中标记面板 https stackoverflow com questions 8508269 how to label panels in lattice using panel text or ltext论据 但是 如果
  • 如何使用 grid.arrange 移动图例位置

    我试图在一页中排列 4 个图 将图例放在底部中心 我用它来获取其中一个图的图例 因为它们对于四个图来说是相同的 get legend lt function myggplot tmp lt ggplot gtable ggplot buil
  • svyby比例的置信区间

    是否存在创建置信区间的现有函数 从一个svyby比例对象 在我的例子中 是一个二进制项目的交叉表survey包裹 我经常比较各组之间的比例 如果有一个可以提取置信区间的函数 使用调查函数svyciprop而不是confint 下面的示例显示

随机推荐

  • 异常处理不适用于 Windows 上的 Qt

    我面临着奇怪的问题 也就是说 Qt 以某种方式关闭了我的程序中的异常处理 我无法捕获任何异常 当我抛出异常时 应用程序崩溃 我在 Windows 7 64 位 上使用 Qt SDK v2010 05 中的 Qt 4 7 0 32 位 Min
  • 如何在 javascript 中将跨度包裹在一段文本周围?

    我有这样的标记 p one two three four p 我想使用 javascript 将其转换为 p one span two three span four span span p 在本例中 我有要包裹在跨度中的部分的偏移量和长度
  • 如何在 Tensorflow 中量化 tf.Variables 的值

    我有一个像这样的训练模型 Y w X b 其中 Y 和 X 是输出和输入占位符 w 和 b 是向量我已经知道w的值只能是0或1 而b仍然是tf float32 当我定义变量 w 时 如何量化它的范围 or我可以有两个不同的学习率吗 像往常一
  • C# 属性组

    有没有办法建立一组属性 Before SuppressMessage Microsoft Design CA1061 SuppressMessage Microsoft Usage CA1812 SuppressMessage Micros
  • 从夹具内部跳过测试

    假设我有一个需要实时数据库的装置 如果实时数据库不存在 我想跳过依赖于该装置的测试 目前 我必须手动标记要跳过的测试 这感觉很多余 pytest fixture def db client DB URI os getenv DB URI S
  • 无法从 Java 连接到 MySQL:MySQL 驱动程序连接逻辑内的 NullPointerException

    我试图连接到我在 Java 程序中使用 MySQL 创建的数据库 但总是失败 为了举例 这是我的代码 import java sql public class Squirrel public static void main String
  • 开发内置短信/彩信 Android 应用程序的定制版本

    好吧 情况是这样的 我正在为客户开发一个应用程序 或尝试这样做 它需要许多 如果不是全部 与内置 SMS MMS 应用程序相同的功能 所以 我想 嘿 Android 是开源的吗 我可以接受应用程序并根据我的需要进行修改 对吧 因此 我在 g
  • php字符串替换引号

    您好 我正在尝试使用 php str replace 将所有单引号变为双引号 但是无论我做什么 它似乎都不起作用 建议 page str replace page 更新 我同意其他人的观点 以下内容对于大多数人来说是更容易阅读的替代方案 p
  • 如何使用pyrebase查询?

    我正在学习如何使用 python django 和pyrebase 进行查询 我在查询多个键值时遇到问题 例如 这是我的数据结构 root account ACC0001 id ACC0001 create day 2020 04 20 1
  • 如何使用 atoi() 获得负值?

    我编写这段代码是为了获取相反形式的数字 但如果我使用任何负输入 它会显示正反转数 C 中的 atoi 函数可以处理负数吗 include
  • 在 C++/CX 中解析 JSON ISO8601 日期

    我有一个来自 JSON 2012 08 01T15 42 06Z 的日期字符串 并且想要在 Windows 运行时中解析它 据我所知 只有COle日期时间可以处理这个问题 当我取出 T 和 Z 字符时 我只能让它正确解析字符串 但这增加了一
  • Pycharm - 在远程解释器中配置 PYTHONPATH

    我在 Windows 上安装了 PyCharm 2 7 3 并且正在尝试在 Linux 计算机上远程开发应用程序 到目前为止 我可以运行简单的程序 但是我正在尝试设置我的 PYTHONPATH 并且 PyCharm 似乎特别忽略了此配置 在
  • 获取 Windows Phone 上 ScrollViewer 的滚动事件

    问题 获取 Windows Phone 上 ScrollViewer 的滚动事件 我有一个像这样的滚动查看器
  • 可以将 crossorigin 属性添加到 Angular cli 生成的脚本标签中吗?

    是否可以将 crossorigin 属性添加到 Angular cli 生成的脚本标签中 运行我的角度应用程序时 脚本标签被添加到我的index html的末尾 是否可以配置 angular cli 以便当这些标签包含在构建 index h
  • 仅从类和接口静态导入

    我的代码在 Eclipse 中编译得很好 但是当我尝试从命令行编译 通过我们基于 ruby 的构建系统 时 我收到以下错误消息 static import only from classes and interfaces 建议不允许静态导入
  • 如何从 WAMP 恢复 MySQL 数据库?

    上个月我不得不重新安装 Windows 并且我已经将WAMP http en wikipedia org wiki WAMP文件夹到另一个分区 现在我再次安装了 WAMP 但我需要旧数据库 如何从安全分区上保存的 WAMP 文件夹中获取旧的
  • 系统托盘应用程序如何在其他平台上完成?

    Windows 有一个 系统托盘 其中包含时钟和始终运行的服务 例如 MSN Steam 等 我想开发一个 wxPython 托盘应用程序 但我想知道它移植到其他平台的效果如何 每个平台上的托盘等效项是什么 以及支持 Windows OSX
  • CGAffineTransformMakeScale 动画不起作用

    我有一个视图控制器 其中有一个视图 在删除它之前 我使用 UIView 动画将其缩小到 0 我的驳回它的代码是 UIView animateWithDuration dismissAnimationDuration delay 0 0 op
  • 如何将 GameLift 与 Unity3d 集成作为游戏客户端

    我正在尝试使用 Unity3d 游戏作为 GameList 客户端 根据GameLift 论坛 https gamedev amazon com forums questions 13771 create client in unity h
  • 如何在绘图中使用多个组,但仅使用定义数量的图例组

    假设我有多个不同细胞的时间序列 我可以根据它们是否接受治疗来分割它们 我如何绘制所有单独的时间序列 不平均 但根据绘图中的治疗对它们进行分组 它与 ggplot 完美配合 我知道我可以从那里使用 ggplotly 但有完整的情节方式吗 以下