0

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

1 回答 1

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

要获取所有品牌的名称,您可以简单地执行(使用[[返回“纯”向量):

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

在此处输入图像描述

于 2017-03-25T08:40:10.883 回答