Как вручную сопоставить цвета с древовидной картой? - PullRequest
1 голос
/ 30 мая 2019

Я использую treemap из пакета treemap для создания визуального представления.

Проще говоря, я создаю treemap из таблицы значений и, в зависимости от значений, отображаю красный, серый и зеленый цвета в секции treemap.

При определенных обстоятельствах это работает, а при других - нет, и я получаю ошибку, которую не могу понять:

Error in do.call("format", args.legend) : second argument must be a list

Пока кажется, что при установке type = "value", если все поля в родительской группе имеют размер 0, и вы пытаетесь указать цвета, возникает ошибка. Однако, если у вас есть два поля в родительской группе и вы установите одно в ноль, оно будет работать до тех пор, пока обе спецификации цвета в этих группах не совпадают.

Я постараюсь изложить это ниже.

Это работает: с красным, серым и зеленым полем, появляющимся в зависимости от того, были ли они назначены -1, 0 или 1 в столбце Colour.

# This is just c(red, grey, green)
my_colour_pal <- c("#bc0303", "#4b5566", "#17a008")
df <- 
  data.frame(Group1 = c("one", "one", "two"),
             Group2 = c("val1", "val2", "val3"),
             Value = c(10, 10, 10),
             Colour = c(-1, 0, 1), stringsAsFactors = FALSE) 

treemap(df, index = c("Group1", "Group2"), type = "value",
        vSize = "Value", vColor = "Colour", palette = my_colour_pal)

Это также работает: точно так же, за исключением того, что одна коробка пропала, потому что Value равно 0. Как и ожидалось, цветовая карта работает.

df <- 
  data.frame(Group1 = c("one", "one", "two"),
             Group2 = c("val1", "val2", "val3"),
             Value = c(10, 0, 10),
             Colour = c(-1, 0, 1), stringsAsFactors = FALSE) 

treemap(df, index = c("Group1", "Group2"), type = "value",
        vSize = "Value", vColor = "Colour", palette = my_colour_pal)

Это не работает: оба Group1 назначения для one имеют Value, установленное в ноль

df <- 
  data.frame(Group1 = c("one", "one", "two"),
             Group2 = c("val1", "val2", "val3"),
             Value = c(0, 0, 10),
             Colour = c(-1, 0, 1), stringsAsFactors = FALSE) 

treemap(df, index = c("Group1", "Group2"), type = "value",
        vSize = "Value", vColor = "Colour", palette = my_colour_pal)

Error in do.call("format", args.legend) : second argument must be a list

Однако, если я делаю то же самое и устанавливаю третье значение на 0, тогда оно отлично работает

my_colour_pal <- c("#bc0303", "#4b5566", "#17a008")
df <- 
  data.frame(Group1 = c("one", "one", "two"),
             Group2 = c("val1", "val2", "val3"),
             Value = c(10, 10, 0),
             Colour = c(-1, 0, 1), stringsAsFactors = FALSE) 

treemap(df, index = c("Group1", "Group2"), type = "value",
        vSize = "Value", vColor = "Colour", palette = my_colour_pal)

Наконец, если я сделаю то же самое, что и в прошлый раз, но выставлю оба цвета в строке 1 и 2 одинаковыми, например. -1 для "красного", тогда я получаю ту же ошибку,

df <- 
  data.frame(Group1 = c("one", "one", "two"),
             Group2 = c("val1", "val2", "val3"),
             Value = c(10, 10, 0),
             Colour = c(-1, -1, 1), stringsAsFactors = FALSE) 

treemap(df, index = c("Group1", "Group2"), type = "value",
        vSize = "Value", vColor = "Colour", palette = my_colour_pal)

Error in do.call("format", args.legend) : second argument must be a list

В итоге

Кажется, что ошибка возникает, если оба поля в родительской группе равны нулю и если оба поля в родительской группе имеют значение Color, установленное на одно и то же число.

...