Как построить это, используя данные радужной оболочки? - PullRequest
1 голос
/ 18 апреля 2020

Использование набора данных Iris

Я хотел бы построить график так, как показано: используя viewport (), ширина и высота графика рассеяния равны 0,66

У меня есть две проблемы:

1.) Как вы видите на втором графике (справа) график имеет более плавные линии, но на первом графике (справа) мы все еще можем видеть линии. Как построить график таким образом, чтобы 1-й и 2-й график выглядели одинаково?

2.) Как можно построить один и тот же график, используя дерево вида сетки, например viewport (), pushViewport () и upViewport ()? )

Вот мой пример кода:

library(ggplot2)
library(readr)
library(grid)
library(gridBase)

 head(x = iris)

  a <- ggplot(data = iris,
   aes(x=Sepal.Length, y=Sepal.Width)) + 
    geom_point()



  b <- ggplot(data = iris,
   aes(x = Sepal.Length)) + 
    geom_histogram()


  c <- ggplot(data = iris,
      aes(x = Sepal.Width)) + 
      geom_histogram() +
      coord_flip()


   # Put these graphs into one

      grid.newpage()
      pushViewport(viewport(layout = grid.layout(2, 2)))
      vplayout <- function(x, y) viewport(layout.pos.row = x, 
                                layout.pos.col = y)
      print(b, vp = vplayout(1, 1))  # key is to define vplayout
      print(a, vp = vplayout(2, 1)) 
      print(c, vp = vplayout(2, 2))

      sample_vp <- viewport(width = 0.66, height = 0.66)

      pushViewport(sample_vp)

Заранее спасибо

Мой вывод:

enter image description here

Ожидаемый результат:

enter image description here

1 Ответ

3 голосов
/ 18 апреля 2020

Для 1) да, эти строки ужасны. Я не знаю, что их вызывает, но поскольку каждый столбец представляет собой прямоугольник, я думаю, что это должен быть графический сбой. Возможно, вы могли бы предотвратить это, установив цвет гистограммы, идентичный заливке.

Для 2) я собираюсь играть в рискованную игру, не давая ответа, который вы хотите услышать (а именно, как это сделать операции в сетке), но, давая вам ответ, я думаю, что вы должны услышать.

Предполагая, что ваша цель - отобразить эти гистограммы в виде маргинальных гистограмм на главной панели, вы можете легко добиться чего-то подобного в пэчворке.

library(ggplot2)
library(patchwork)
#> Warning: package 'patchwork' was built under R version 3.6.3

a <- ggplot(data = iris,
            aes(x=Sepal.Length, y=Sepal.Width)) + 
  geom_point()

b <- ggplot(data = iris,
            aes(x = Sepal.Length)) + 
  geom_histogram()


c <- ggplot(data = iris,
            aes(x = Sepal.Width)) + 
  geom_histogram() +
  coord_flip()

b + plot_spacer() + a + c + 
  plot_layout(nrow = 2, ncol = 2, widths = c(1, 0.5), heights = c(0.5, 1))
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Создано в 2020-04-18 пакетом представ. (v0.3.0)

Вы также можете оставить оси маргинальных графиков, устанавливая разрывы и имена :

b + scale_x_continuous(breaks = NULL, name = "") + 
  plot_spacer() +
  a + 
  c + scale_x_continuous(breaks = NULL, name = "") +
  plot_layout(nrow = 2, ncol = 2, widths = c(1, 0.5), heights = c(0.5, 1))

...