繁体   English   中英

R圆化和弦和网格着色

[英]R circlize chord and grid colouring

我有两列的数据集。 一种是数据类别,一种是我的样本。 我以mtcars为例

library(circlize)
library(data.table)
mtCARS<- mtcars
setDT(mtCARS, keep.rownames = TRUE)[]
mtCARS1<- mtCARS[,c(1,11)]
colnames(mtCARS1)<- c("Brand", "gear")

现在让我说我对汽车名称(现在称为品牌)感兴趣,因为我将其作为样本,并将装备列为类别。 我想要两件事

1.从类别发出的和弦,在这种情况下,齿轮为三种颜色,对应于类别编号。

2.所有样品(在本例中为品牌)的网格颜色应相同。

如果在哪里执行

chordDiagram(as.data.frame(mtCARS1)

您将获得所有内容的随机颜色分配,并且类别(品牌)发出的和弦将被上色。

现在需要执行以下命令(我认为),如下所示

chordDiagram(as.data.frame(mtCARS1), col=col, grid.col = grid.col)

请注意,我已经定义了col和grid.col函数,我认为需要分别定义它们来解决我的第1点和第2点,这就是我遇到的问题。

到目前为止,对于和弦颜色(第1点),我已经尝试了以下方法,但没有奏效

library(RColorBrewer)    
col<- colorRampPalette(c("red", "green", "blue"), space= "rgb")(30)

对于网格颜色(点2),我尝试过

othercol<- as.character(mtCARS1[,1])
grid.col = c("4" = "red", "3" = "green", "5" = "yellow", othercol = "blue")

这使我得到所需的类别(齿轮)颜色,但是对于示例颜色(品牌),网格颜色不是蓝色。

请注意,我的实际数据是作为数据框而不是矩阵加载的。

注意:解决方法一是反转列的顺序,因为它是定义所用颜色数量的第一列。 因此做

mtCARS1<- mtCARS[,c(11,1)]

如果您看到othercol的价值,您将知道发生了什么事情:

> othercol
[1] "c(\"Mazda RX4\", \"Mazda RX4 Wag\", \"Datsun 710\", \"Hornet 4 Drive\", \"Hornet Sportabout\", \"Valiant\", \"Duster 360\", \"Merc 240D\", \"Merc 230\", \"Merc 280\", \"Merc 280C\", \"Merc 450SE\", \"Merc 450SL\", \"Merc 450SLC\", \"Cadillac Fleetwood\", \"Lincoln Continental\", \"Chrysler Imperial\", \"Fiat 128\", \"Honda Civic\", \"Toyota Corolla\", \"Toyota Corona\", \"Dodge Challenger\", \"AMC Javelin\", \"Camaro Z28\", \"Pontiac Firebird\", \"Fiat X1-9\", \"Porsche 914-2\", \"Lotus Europa\", \"Ford Pantera L\", \"Ferrari Dino\", \"Maserati Bora\", \"Volvo 142E\"\n)"

要获得所有品牌的名称,您可以简单地做到这一点(使用[[返回“纯”向量):

> brand = mtCARS1[[1]]
> brand
 [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"
 [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"
 [7] "Duster 360"          "Merc 240D"           "Merc 230"
[10] "Merc 280"            "Merc 280C"           "Merc 450SE"
[13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood"
[16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"
[19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"
[22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"
[25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"
[28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"
[31] "Maserati Bora"       "Volvo 142E"

然后,您可以将蓝色分配给所有这些品牌并构建grid.col向量:

othercol = structure(rep("blue", length(brand)), names = brand)
grid.col = c("4" = "red", "3" = "green", "5" = "yellow", othercol)
chordDiagram(as.data.frame(mtCARS1), grid.col = grid.col, 
    col = grid.col[as.character(mtCARS1[[2]])])

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM