ggplot基本格式问题?

问题描述 投票:1回答:1

我有一个带有列的大型DF(下面只是一个示例):

Identity: "T4", "T4", "T4", "TNBC", "TNBC, "Control", "Control"
IdentityColor: "red", "red", "red", "blue", "blue", "green", "green"

PC_1和PC_2:具有与上述变量相关的一些值,用于主成分分析。

我只需要一个散点图:1.身份(T4,TNBC和控件)2.对应于组的颜色。3.点周围的黑色边框(Shape = 21)

我认为应该正常工作的代码不起作用,如下所示:

ggplot(DF, aes(PC_1, PC_2, fill=Identity))+

geom_point(shape=21, size=2)+

scale_fill_manual(values=unique(as.character(DF$IdentityColor

但是我得到的图形将颜色分配给错误的组!注意:我无法手动执行此操作,因为对于某些DF,我最多有18组。

Figure of the output I get

r ggplot2
1个回答
0
投票

是的,这是语法问题,比什么都重要。简而言之,任何values=命令的scale_都应视为列表,而不是数据帧。强制将数据框添加到列表的效果并不理想,因此最好显式创建它。例如:

set.seed(12345)
df <- data.frame(
  x=1:20,
  y=rnorm(20),
  grp=sample(c('T4','TNBC','Control'),20,replace=TRUE)
)

color_list <- list("T4"="red", "TNBC"="blue", "Control"="green")

ggplot(df, aes(x=x,y=y,fill=grp)) +
  geom_point(shape=21, size=4) +
  scale_fill_manual(values=color_list)

enter image description here

EDIT:正如注释中指出的,列表不是严格要求的,但是命名实体对于确保颜色与特定标签相关联很重要。如果在以上示例中将list(更改为c(,则其工作原理相同。您也可以提供一个字符向量,但是,根据fill=美学中的级别顺序将颜色分配为一个因素。您可以在原始示例中利用此优势,方法是创建一个字符矢量,该字符矢量根据填充美学的级别正确设置排序。

© www.soinside.com 2019 - 2024. All rights reserved.