ggplot2: указание координат geom_polygon относительно размера geom_point - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь создать лесной участок с алмазом для сводной сводной статистики.

Мне удалось создать алмаз с geom_polygon, однако размер алмаза изменяется относительноразмер слоя geom_point выше.Это означает, что в зависимости от высоты графика, он либо выглядит хорошо, либо тупо.

Я хочу как-то исправить многоугольник, чтобы он имел ту же высоту (ymin to ymax), что и белые ромбы над ним.Это возможно?Можно ли измерить высоту (точные координаты) geom_points, а затем использовать ее при построении многоугольника?

На изображении ниже показана проблема: geom_points остаются неизменными по размеру, однако ромб растягивается вместе с графиком.

link to image to show the issue

код, который я использовал для создания графика и алмаза, приведен ниже:

df<-structure(list(cluster = c("All", "Mostly female", "Mixed gender", 
"Mostly male", "study 1", "study 2", "study 3", "study 4", "study 5", 
"study 6"), k = c(22, 10, 8, 9, NA, NA, NA, NA, NA, NA), n = c(35, 
12, 8, 11, NA, NA, NA, NA, NA, NA), est = c(0.61, 0.49, 0.55, 
0.79, 0.41, 0.7, 0.4, 0.67, 0.38, 0.91), lower = c(0.49, 0.31, 
0.35, 0.64, 0.39, 0.64, 0.34, 0.61, 0.32, 0.84), upper = c(0.71, 
0.67, 0.74, 0.89, 0.44, 0.75, 0.46, 0.73, 0.44, 0.95), type = c("baseline", 
"moderator", "moderator", "moderator", "data", "data", "data", 
"data", "data", "data"), setting = c("Pooled", "Pooled", "Pooled", 
"Pooled", "Effect sizes", "Effect sizes", "Effect sizes", "Effect sizes", 
"Effect sizes", "Effect sizes"), year = c(1, 2, 3, 4, 1991, 1992, 
1992, 1992, 1992, 1994)), row.names = c(NA, 10L), class = "data.frame")

Я создаю лесной участок, подобный этому:

library(tidyverse)  

my_plot <-
  ggplot(df, 
         aes(y = reorder(cluster, year), x = est,
             xmin = lower, xmax = upper)) + 
    geom_point(color = "black") +
    geom_errorbarh(data = df[df$type != "baseline", ] , height = .1) +
    geom_vline(xintercept = .5, color = 'black', linetype = 'dashed') + 
    geom_point(data = df[df$type == "moderator", ],
               color = 'black', shape = 23, size = 3.2, fill = "white") + 
    facet_grid(setting ~ ., scales = 'free', space = 'free') +
    theme_classic() + 
    scale_x_continuous(limits = c(0, 1)) +
    geom_point(
      #add summary points
      data = df[df$type == "baseline", ],
      color = 'black', shape = 23, size = 4, fill = "black") + 
    geom_errorbarh(data = df[df$type == "baseline", ] , height = .2)

Я создаю алмаз вот так:

# create diamond polygon values #####
bd = df %>% filter(type == "baseline")

diamond_shape <-
  data.frame(
    x = c(bd$lower, bd$est, bd$upper, bd$est),
    y = c(1, 1.4, 1,0.6),
    names = c("xmin", "ymax", "xmax", "ymax"),
    setting = "Pooled"
  )

    #add diamond to plot ######        
my_plot + 
  geom_polygon(data = diamond_shape, aes(x = x, y = y), inherit.aes = F)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...