2015-09-09 2 views
1

меня есть кадр данных, как:ggvis: Смешение наследования свойств от родительского слоя

x1 x2 y1 y2 labels  colors 
1 1.0 1.1 1 2  A blueviolet 
2 1.3 1.4 1 2  A  azure1 
3 1.0 1.1 3 4  B navajowhite3 
4 1.3 1.4 3 4  B  grey46 

, который содержит позиции для прямоугольников и этикеток. Но когда я пытаюсь добавить текстовый слой, я получаю сообщение об ошибке, x2 и y2 неизвестные свойства:

ggvis(data = df2, x = ~x1, y = ~y1, x2 = ~x2, y2 = ~y2) %>% 
    layer_rects(fill = ~colors) %>% 
    layer_text(x = ~ x1 - 1, y = ~y1 + 0.4, text := ~labels) 

Error: Unknown properties: x2, y2. 
Did you mean: x, y? 

Как я могу сказать ggvis удалить x2 и y2 для текстового слоя?

Я уже пробовал следующее, потому что описание «наследуют» звучит многообещающе:

ggvis(data = df2, x = ~x1, y = ~y1, x2 = ~x2, y2 = ~y2) %>% 
    layer_rects(fill = ~colors) %>% 
    layer_text(props(x = ~ x1 - 1, y = ~y1 + 0.4, inherit = FALSE), 
       text := ~labels) 

, но это не удается с следующей ошибкой:

Error in new_prop.default(x, property, scale, offset, mult, env, event, : 
    Unknown input to prop: list(property = "x", value = x1 - 1, scale = "x", offset = NULL, mult = NULL, event = "update", env = <environment>)list(property = "y", value = y1 + 0.4, scale = "y", offset = NULL, mult = NULL, event = "update", env = <environment>) 

Один из способов заключается указать все свойства во всех слои, но я надеюсь, что есть лучшее решение :)

ответ

1

Ваша догадка правильная: вы должны использовать inherit = FALSE, но нет необходимости обертывать это в звонок props().

ggvis(data = df2, x = ~x1, y = ~y1, x2 = ~x2, y2 = ~y2) %>% 
    layer_rects(fill = ~colors) %>% 
    layer_text(text := ~labels, inherit = F, x = ~x1 + 0.05, y = ~y1 + 0.5, fontSize := 40) 

enter image description here

С стилистической точки зрения, вы должны объявить только «универсальные» отображения в ggvis, сохраняя при этом один слое специфических в layer_*. В этом случае нежелательное наследование не будет проблемой:

ggvis(data = df2) %>% 
    layer_rects(fill = ~colors, x = ~x1, y = ~y1, x2 = ~x2, y2 = ~y2) %>% 
    layer_text(text := ~labels, x = ~x1 + 0.05, y = ~y1 + 0.5, fontSize := 40) 
Смежные вопросы