使用 swimplot 和 ggplot2 包的格式更改仅影响图例而不影响条形图

Formatting changes affect only legend and not bar graph using swimplot and ggplot2 packages

更新- 这个问题已经解决,更新的代码在 post.

的末尾

我正在尝试创建一个游泳图,以可视化单个患者使用多剂量水平 (DL) 给药的治疗持续时间。每个患者将被分配到只有一个 DL 的治疗,但多个患者可以被分配到一个给定的 DL(例如 3 名患者在 DL1,3 名患者和 DL2,等等)。我想根据 DL 对游泳者图中的条形图进行颜色编码。

我正在使用 R 的 swimplot 包,并一直遵循位于此处的指南 (https://cran.r-project.org/web/packages/swimplot/vignettes/Introduction.to.swimplot.html)。

本指南足以满足我尝试过的大多数操作,直到我尝试更改图中条形图和相应图例的颜色。按照该指南中“使用 ggplot 操作使绘图更美观”下标题为“修改颜色和形状”的部分,我能够更改图例中的条形颜色,但不能更改条形本身。

Example here

我一直在使用下面的代码。

    library(ggplot2)
    library (swimplot)
    library (gdata)
    library (readxl)
        
    ClinicalTrial.Arm <- read_excel("Swimmer_Test_Data1.xls")
    
    ClinicalTrial.Arm <- as.data.frame(ClinicalTrial.Arm)
        
    arm_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',width=.85+ scale_fill_manual(name="Arm",values=c("DL1" ="#003f5c", "DL2"="#374c80","DL3"="#7a5195","DL4"="#bc5090","DL5"="#ef5675","DL6"="#ff764a","DL7"="#ffa600"))+ scale_color_manual(name="Arm",values=c("DL1" ="#003f5c", "DL2"="#374c80","DL3"="#7a5195","DL4"="#bc5090","DL5"="#ef5675","DL6"="#ff764a","DL7"="#ffa600"))
        
    arm_plot

我已经尝试了很多方法来解决这个问题,但我对 R 还很陌生,我认为我的知识还不足以有效地解决问题。我尝试了各种语法更改(例如删除引号)并尝试使用 geom bar 命令但不确定 how/what 映射到 X 和 Y(似乎我不需要这样做) .

我也试过用下面的代码,但是报错了。

    Colors <- c("DL1" ="#003f5c", "DL2"="#374c80","DL3"="#7a5195","DL4"="#bc5090","DL5"="#ef5675","DL6"="#ff764a","DL7"="#ffa600")       
            
    arm_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt',width=.85, fill = Colors)+ scale_fill_manual(name="Arm",values=c("DL1" ="#003f5c", "DL2"="#374c80","DL3"="#7a5195","DL4"="#bc5090","DL5"="#ef5675","DL6"="#ff764a","DL7"="#ffa600"))+ scale_color_manual(name="Arm",values=c("DL1" ="#003f5c", "DL2"="#374c80","DL3"="#7a5195","DL4"="#bc5090","DL5"="#ef5675","DL6"="#ff764a","DL7"="#ffa600"))
    
    Error in `check_aesthetics()`:
    ! Aesthetics must be either length 1 or the same as the data (20): fill
    Run `rlang::last_error()` to see where the error occurred.

如有任何帮助,我们将不胜感激。

已解决! 已更新,工作代码

library(ggplot2)
library (swimplot)
library (gdata)
library (readxl)

ClinicalTrial.Arm <- read_excel("Swimmer_Test_Data1.xls")
ClinicalTrial.Arm <- as.data.frame(ClinicalTrial.Arm)

Colors <- c("DL1" ="#003f5c", "DL2"="#374c80","DL3"="#7a5195","DL4"="#bc5090","DL5"="#ef5675","DL6"="#ff764a","DL7"="#ffa600")                                                               


arm_plot <- swimmer_plot(df=ClinicalTrial.Arm,id='id',end='End_trt', name_fill = "Arm", width=.85) + scale_fill_manual(name="Arm",values = Colors) + 
scale_color_manual(name="Arm",values=Colors)

为了使您的代码工作,您首先必须在 fill 美学上映射一个变量,使用 swimplot 可以通过 name_fill 参数实现:

注意:当我使用 swimplot 包中的 ClinicalTrial.Arm 数据集时,我调整了您的调色板,使其适用于该数据集中 Arm 列的三个类别。

library(ggplot2)
library(swimplot)

#pal <- c("DL1" = "#003f5c", "DL2" = "#374c80", "DL3" = "#7a5195", "DL4" = "#bc5090", "DL5" = "#ef5675", "DL6" = "#ff764a", "DL7" = "#ffa600")

pal <- c("Arm A" = "#003f5c", "Arm B" = "#bc5090", "Off Treatment" = "#ffa600")

swimmer_plot(df = ClinicalTrial.Arm, id = "id", end = "End_trt", name_fill = "Arm", width = .85) +
  scale_fill_manual(name = "Arm", values = pal)