使用 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)
更新- 这个问题已经解决,更新的代码在 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)