Как выровнять гистограмму и линейный график в ggvis на графике с двумя осями Y?
Используя следующий код:
library(ggvis)
library(dplyr)
mydf2 <- iris %>%
group_by(Species) %>%
summarize(Sepal.Length = mean(Sepal.Length),
Sepal.Width = mean(Sepal.Width))
mydf2 %>% as.data.frame() %>%
ggvis(x = ~ Species, y = ~ Sepal.Length ) %>%
layer_bars(fillOpacity := 0.1 ) %>%
add_axis("y", "ywidth", orient = "right", grid = FALSE) %>%
layer_lines(prop("y", ~ Sepal.Width, scale = "ywidth")) %>%
add_axis('x', title='the species', properties = axis_props(labels=list(fill='blank'))) %>%
add_axis('x', 'myx2', orient='bottom', title='') %>%
layer_lines(prop("x", ~ Species, scale = "myx2"), stroke := 'blank')
Выход:
Моя проблема:
- Кто-нибудь знает способ выравнивания линейчатых и линейных диаграмм на этом графике с двумя осями Y? Мне бы хотелось, чтобы отметки были выровнены по оси X для обеих диаграмм.
редактировать
Я решил отредактировать этот вопрос и предоставить лучший пример, который лучше показывает проблему.
1 ответ
Примерно через 4 месяца и небольшого количества исследований я нашел способ обойти эту проблему, хотя это своего рода хак:
mydf2 %>% as.data.frame() %>% mutate(Species2= as.numeric(Species)) %>%
ggvis(x = ~ Species2, y = ~ Sepal.Length ) %>%
layer_bars(fillOpacity := 0.1, width = 0.9 ) %>%
add_axis("y", "ywidth", orient = "right", grid = FALSE) %>%
layer_lines(prop("y", ~ Sepal.Width, scale = "ywidth")) %>%
add_axis('x', title='the species', properties = axis_props(labels=list(fill='blank'))) %>%
add_axis('x', 'myx2', orient='bottom', title='', grid=F) %>%
layer_lines(prop("x", ~ Species, scale = "myx2"), stroke := 'blank')
Выход
Рациональный ответ, приведенный выше, заключается в том, что для выравнивания линии и гистограммы ось X должна быть числовой. Итак, я создал новую категориальную ось X, которая используется для построения невидимой линии (проверьте последние две строки кода). Результат не оптимален, но он работает.
Вы также можете проверить этот ответ тоже.
PS Пример кода для вопроса взят из этого поста на github. Вышеизложенное (к счастью) поднималось как проблема там. Если это будет исправлено (или есть способ это исправить), я обновлю ответ.