"масштабирование"/"масштабирование" с координатами

У меня есть полярный график, который использует geom_smooth(). Сглаженная лессовая линия очень мала и окружает центр участка. Я хотел бы "увеличить", чтобы вы могли видеть это лучше.

Используя что-то вроде scale_y_continuous(limits = c(-.05,.7)) увеличит кольцо geom_smooth, но оно также изменит его, потому что оно пересчитает точки данных, ограниченные limits = c(-.05,.7) аргумент.

Для картезианского заговора я мог бы использовать что-то вроде coord_cartesian(ylim = c(-.05,.7)) который будет обрезать диаграмму, но не основные данные. Однако я не вижу способа сделать это с coord_polar()

Есть идеи? Я думал, что может быть способ сделать это с grid.clip() в сетке, но мне не очень повезло.

Есть идеи?

Как теперь выглядит мой сюжет, обратите внимание на "более высокую" красную линию: Текущий сюжет, обратите внимание на большую красную линию, но она маленькая

Что я хотел бы нарисовать: Что бы я хотел получить

Что я получу, когда использую scale_y_continuous() обратите внимание на "более высокую" синюю линию, также она еще не такая большая. То, что я получаю с помощью <code> scale_y_continuous () </ code>, отмечает, что синяя линия теперь больше, а она все еще не такая большая scale_y_continuous () , отмечает, что синяя линия теперь больше, а она все еще не такая большая">

1 ответ

Я не нашел способ сделать это непосредственно в coord_polar, но этого можно достичь, изменив объект ggplot_build под капотом.

Во-первых, вот попытка составить сюжет, похожий на ваш, используя поддельные данные, приведенные внизу этого ответа.

library(ggplot2)
plot <- ggplot(data, aes(theta, values, color = series, group = series)) + 
  geom_smooth() + 
  scale_x_continuous(breaks = 30*-6:6, limits = c(-180,180)) +
  coord_polar(start = pi, clip = "on") # use "off" to extend plot beyond axes
plot

Здесь мой Y (или r для радиуса) ось колеблется от -2,4 до 4,3. введите описание изображения здесь

Мы можем подтвердить это, посмотрев на ggplot_build объект:

# Create ggplot_build object and look at radius range
plot_build <- ggplot_build(plot)
plot_build[["layout"]][["panel_params"]][[1]][["r.range"]]
# [1] -2.385000  4.337039

Если мы переопределим диапазон r и заговор, мы получаем то, что вы ищете, крупный план сюжета.

# Here we change the 2nd element (max) of r.range from 4.337 to 1
plot_build[["layout"]][["panel_params"]][[1]][["r.range"]][2] <- 1
plot2 <- ggplot_gtable(plot_build)
plot(plot2)

введите описание изображения здесь

Обратите внимание, что это может быть не идеальное решение, так как кажется, что это вызывает некоторые проблемы с обрезкой изображений, которые я не знаю, как решить. Я не проверял, можно ли их преодолеть, используя ggsave или, возможно, путем дальнейшего изменения ggplot_build объект.

Пример данных, использованных выше:

set.seed(4.2)
data <- data.frame(
  series = as.factor(rep(c(1:2), each = 10)),
  theta  = rep(seq(from = -170, to = 170, length.out = 10), times = 2), 
  values = rnorm(20, mean = 0, sd = 1)
)
Другие вопросы по тегам