#r #ggplot2 #facet #geom-text #geom-point
Вопрос:
У меня есть следующий пример кода:
x <- c(1,1.2,1.3,1.1,2,2.5,3.6)
y <- c(3,3.1,2.9,3.6,4.5,5.6,6.7)
z <- c('Austria',' Germany', 'Italy', 'France', 'Spain','Portugal', 'Belgium')
dataset <-data.frame(x,y,z)
ggp <- ggplot(dataset, mapping = aes(x=x, y=y))
geom_text_repel(mapping = aes(label = z),
size = 2,
min.segment.length = 0,
seed = 42,
box.padding = 0.4,
arrow = arrow(length = unit(0.007, "npc")),
nudge_x = .03,
nudge_y = .03,
color = "grey60")
geom_point(data = dataset,aes(colour=z, size = y/x), alpha=0.6)
facet_zoom(x = x < 2, horizontal = FALSE ,zoom.size = 0.3, show.area = FALSE)
coord_cartesian(clip="off")
ggp
Я хотел бы отображать на главной панели только названия точек, которых нет в масштабировании фасета, в то время как в масштабировании фасета я хотел бы отображать только названия видимых точек. Есть ли способ сделать и то, и другое одновременно?
Я также хотел бы избежать использования geom_text
Ответ №1:
Я думаю, вы можете использовать zoom.data
аргумент из facet_zoom
:
масштабирование.данные: выражение, вычисляющееся в логическом векторе. Если значение TRUE, данные отображаются только на панелях масштабирования. Если значение FALSE, данные отображаются только в контекстной панели. Если НЕТ, данные будут отображаться во всех панелях.
Сначала добавьте zoom
столбец в свой набор данных и установите TRUE
значение, если x
меньше 2 (это будет показано на панели масштабирования). В противном zoom
случае должно быть установлено значение FALSE
(это будет показано на контекстной панели).
dataset$zoom <- ifelse(dataset$x < 2, TRUE, FALSE)
Для facet_zoom
использования zoom.data
аргумента и установки в новый zoom
столбец:
facet_zoom(x = x < 2, horizontal = FALSE, zoom.data = zoom, zoom.size = 0.3, show.area = FALSE)
Вот весь код для воспроизводимости:
library(ggplot2)
library(ggrepel)
library(ggforce)
x <- c(1,1.2,1.3,1.1,2,2.5,3.6)
y <- c(3,3.1,2.9,3.6,4.5,5.6,6.7)
z <- c('Austria',' Germany', 'Italy', 'France', 'Spain','Portugal', 'Belgium')
dataset <-data.frame(x,y,z)
dataset$zoom <- ifelse(dataset$x < 2, TRUE, FALSE)
ggp <- ggplot(dataset, mapping = aes(x=x, y=y))
geom_text_repel(mapping = aes(label = z),
size = 2,
min.segment.length = 0,
seed = 42,
box.padding = 0.4,
arrow = arrow(length = unit(0.007, "npc")),
nudge_x = .03,
nudge_y = .03,
color = "grey60")
geom_point(aes(colour=z, size = y/x), alpha=0.6)
facet_zoom(x = x < 2, horizontal = FALSE , zoom.data = zoom, zoom.size = 0.3, show.area = FALSE)
coord_cartesian(clip="off")
ggp
Сюжет