"масштабирование"/"масштабирование" с координатами
У меня есть полярный график, который использует 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()
обратите внимание на "более высокую" синюю линию, также она еще не такая большая. scale_y_continuous () code>, отмечает, что синяя линия теперь больше, а она все еще не такая большая">
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)
)