R环绕和弦和网格着色

时间:2017-03-24 11:59:13

标签: r colors circlize

我有一个包含两列的数据集。一个是数据类别,一个是我的样本。我使用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)]

1 个答案:

答案 0 :(得分:2)

如果您看到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)"

要获取所有品牌的名称,您只需执行(使用[[返回&#34;纯&#34;向量):

> 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]])])

enter image description here