построение прямоугольников и линейных линий с дискретной осью в ggplot2 - PullRequest
0 голосов
/ 02 февраля 2019

Я довольно новичок в stackoverflow.Я хочу построить прямоугольники вместо линейных, потому что я хочу черную рамку.На самом деле мой профессор хочет иметь черную рамку, но это не проблема для стекопотока

Загрузка библиотеки и создание фиктивного набора данных

library(tidyverse)

mydat <- tibble(
       mymsmt = rep(c("bio", "bio", "den", "den"), 2),
       mylvl = c("NT", "till", "NT", "till", "no", "yes", "no", "yes"),
       mytrt = c(rep("tillage", 4), rep("herbicides", 4)),
       est = c(-60, -13, -65, -40, -16, -24, -49, -50),
       cilow = c(-85, -48, -78, -56, -61, -60, -68, -64),
       ciup = c(8, 45, -44, -18, 79, 42, -20, -31)) %>%
       # Dummy code mylvls as numeric
       mutate(mylvln = rep(c(1, 2), 4))  

Если я строю график только с помощью линейного ряда, это работает (мне пока не разрешено вставлять изображения)

ggplot(mydat, aes(est, mylvl)) + 
  geom_linerangeh(aes(xmin = cilow, xmax = ciup), color = "blue", size = 5) +
  # geom_rect(aes(xmin = cilow, xmax = ciup, 
  #               ymin = mylvln - 0.2, ymax = mylvln + 0.2), 
  #           fill = "red", color = "black") +
  geom_point() + 
  facet_grid(mytrt ~ mymsmt, scales = "free")

График с только прямоугольниками, с ошибками, с ошибкой: Дискретное значение передается в непрерывном масштабе

ggplot(mydat, aes(est, mylvl)) + 
  #geom_linerangeh(aes(xmin = cilow, xmax = ciup), color = "blue", size = 5) +
  geom_rect(aes(xmin = cilow, xmax = ciup, 
                 ymin = mylvln - 0.2, ymax = mylvln + 0.2), 
             fill = "red", color = "black") +
  geom_point() + 
  facet_grid(mytrt ~ mymsmt, scales = "free")

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

ggplot(mydat, aes(est, mylvl)) + 
  geom_linerangeh(aes(xmin = cilow, xmax = ciup), color = "blue", size = 5) +
  geom_rect(aes(xmin = cilow, xmax = ciup, 
                ymin = mylvln - 0.2, ymax = mylvln + 0.2), 
            fill = "red", color = "black", alpha = 0.5) +
  geom_point() + 
  facet_grid(mytrt ~ mymsmt, scales = "free")

Почему?Это работает, я получаю фигуру, которую хочу, но я не знаю почему.Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 03 февраля 2019

Вы также можете использовать geom_tile вместо geom_rect:

ggplot(mydat, aes(est, mylvl)) + 
  geom_tile(aes(width = ciup-cilow, height=0.1),  fill="red", color="black") +
  geom_point() + 
  facet_grid(mytrt ~ mymsmt, scales = "free")

enter image description here

...