#r #ggplot2 #geom-text
#r #ggplot2 #геометрический текст
Вопрос:
Я создал график с geom_rect
помощью и добавил аннотацию с geom_text_repel
помощью, но когда я хочу создать несколько графиков, где я увеличиваю часть исходного графика. Также отображаются метки областей за пределами области масштабирования.
Это минимальный пример:
start = c(1, 5,8, 14, 19, 25)
end =c(3, 6,12, 16, 22, 30)
label = c(1,2,3, 4, 5, 6)
library(ggplot2)
library(ggrepel)
regions = tibble::tibble(label, start, end)
ggplot()
scale_x_continuous()
scale_y_continuous(name = "")
geom_rect(
data = regions,
mapping = aes(
xmin = start,
xmax = end,
ymin = 1.5,
ymax = 1.8),
color = "black",
fill = "#56B4E9"
)
geom_text_repel(
data = regions,
aes(
x = start (end - start) / 2,
y = 1.8,
label = label,
),
size = 10,
force_pull = 0,
nudge_y = 0.05,
direction = "x",
angle = 90,
vjust = 0,
segment.size = 0.5,
)
ylim(1.38, 2.2)
ylab("")
xlab("")
theme_minimal()
Этот код генерирует этот график:
Я хочу увеличить поле 3, поэтому я попытался добавить xlim(8,12)
или facet_zoom(xlim = c(8, 12))
, но на увеличенном графике есть аннотации (метки) полей 1, 2, … сбоку, как вы можете видеть здесь (1,2 справа и 4,5,6 слева от увеличенного графика)
и аналогичный результат с xlim(8,12)
Как я могу удалить метки (аннотации) за пределами увеличенной области (1,2 справа и 4,5,6 слева от увеличенного графика?)
Комментарии:
1. Для быстрого исправления вы можете просто
regions
подмножить свои данные в вызове `geom_text_repel ()’, чтобы включить только метку 3.2. Спасибо, PLY, если я подмножу свой
region
data
аргумент ingeom_text_repel
в , подмножество является вектором, тогдаdata
как аргумент принимает только фрейм данных.3. Было бы здорово, если бы я мог сделать что-то вроде
data = (regions$label == 3)
Ответ №1:
Я могу придумать два быстрых исправления, первое из которых — то, о котором вы уже упоминали. Возможно, вы ввели его с ошибкой, так как я могу запустить его нормально.
- Установить
xlim(8,12)
library(ggrepel)
start = c(1, 5,8, 14, 19, 25)
end =c(3, 6,12, 16, 22, 30)
label = c(1,2,3, 4, 5, 6)
regions = data.frame(label, start, end)
ggplot()
scale_x_continuous()
scale_y_continuous(name = "")
geom_rect(
data = regions,
mapping = aes(
xmin = start,
xmax = end,
ymin = 1.5,
ymax = 1.8),
color = "black",
fill = "#56B4E9"
)
geom_text_repel(
data = regions,
aes(
x = start (end - start) / 2,
y = 1.8,
label = label,
),
size = 10,
force_pull = 0,
nudge_y = 0.05,
direction = "x",
angle = 90,
vjust = 0,
segment.size = 0.5,
)
ylim(1.38, 2.2)
xlim(8, 12)
ylab("")
xlab("")
theme_minimal()
Если я запущу это, я получу следующее изображение
Однако использование xlim()
не всегда рекомендуется, поскольку оно отбрасывает все другие точки, которые не соответствуют условию. Хотя для вашего случая это может быть выгодно.
regions
Правильное использование подмножества и увеличенияcoord_cartesian()
.
ggplot()
scale_x_continuous()
scale_y_continuous(name = "")
geom_rect(
data = regions,
mapping = aes(
xmin = start,
xmax = end,
ymin = 1.5,
ymax = 1.8),
color = "black",
fill = "#56B4E9"
)
geom_text_repel(
data = subset(regions, label == 3),
aes(
x = start (end - start) / 2,
y = 1.8,
label = label,
),
size = 10,
force_pull = 0,
nudge_y = 0.05,
direction = "x",
angle = 90,
vjust = 0,
segment.size = 0.5,
)
ylim(1.38, 2.2)
coord_cartesian(xlim = c(8, 12))
ylab("")
xlab("")
theme_minimal()
Комментарии:
1. Большое вам спасибо, PLY, я не знал, что вы можете использовать
coord_cartesian(xlim = c(8, 12))
, но у меня все та же проблема. Я не уверен, почему ваш график чистый и не содержит никаких меток 1,2,4,5,6 сбоку. Я скопировал точный код, который у вас есть здесь, и вставил его в чистую среду в studio, но я не могу повторно сгенерировать те же результаты, что и у вас. Мой график по-прежнему похож на третий график в исходном вопросе.2. @Сэм, это странно. В качестве примечания я немного отредактировал свой код, чтобы
regions = data.frame(label, start, end)
. Я не совсем в курсе, но, возможно, это может быть связано с версиями вашего пакета или версией R. Не могли бы вы показать свойsessionInfo()
?3. это работает, если я подмножествую данные регионов в
the geom_text_repel
вызове, чтобы включить только использование метки 3data = subset(regions, regions$label == 3)
. Большое вам спасибо, PLY 🙂