Добавить графику (ы) за существующей графикой в ​​ggplot2 (R) [duplicate]

Здесь я рассматриваю несколько случаев, через которые вы можете очистить концепцию

1. ArrayList<String> arr = new ArrayList<String>();
2. ArrayList<String> arr = new ArrayList();
3. ArrayList arr = new ArrayList<String>();

Случай 1

ArrayList<String> arr является ссылочной переменной ArrayList с типом String, которые ссылаются на объект ArralyList типа String. Это означает, что он может содержать только объект типа String.

Строго для String не для Raw Type, поэтому он никогда не будет предупреждать.

    arr.add("hello");// alone statement will compile successfully and no warning.

    arr.add(23);  //prone to compile time error.
     //error: no suitable method found for add(int)

Случай 2

В этом случае ArrayList<String> arr является строгим типом, но ваш объект new ArrayList(); является сырым типом.

    arr.add("hello"); //alone this compile but raise the warning.
    arr.add(23);  //again prone to compile time error.
    //error: no suitable method found for add(int)

здесь arr является строгим типом. Таким образом, он будет поднимать ошибку времени компиляции при добавлении integer.

Предупреждение: - Объект типа Raw ссылается на тип Strict Referenced Variable ArrayList.

Случай 3

В этом случае ArrayList arr является сырым типом, но ваш Object new ArrayList<String>(); является строгим типом.

    arr.add("hello");  
    arr.add(23);  //compiles fine but raise the warning.

Он добавит в него любой тип объекта, потому что arr является сырым типом.

Внимание: - A Strict Тип Объект ссылается на a raw тип, на который ссылается переменная.

20
задан Ricardo Saporta 27 November 2013 в 20:12
поделиться

2 ответа

Спасибо @baptiste за то, что указали мне в правильном направлении. Чтобы вставить слой под все остальные слои, просто измените элемент layers объекта сюжета.

## For example:
P$layers <- c(geom_boxplot(), P$layers)

Ответ на вопрос о бонусе:

Этот удобный маленький функция вставляет слой с заданным z-уровнем:

insertLayer <- function(P, after=0, ...) {
  #  P     : Plot object
  # after  : Position where to insert new layers, relative to existing layers
  #  ...   : additional layers, separated by commas (,) instead of plus sign (+)

      if (after < 0)
        after <- after + length(P$layers)

      if (!length(P$layers))
        P$layers <- list(...)
      else 
        P$layers <- append(P$layers, list(...), after)

      return(P)
    }
31
ответ дан Ricardo Saporta 21 August 2018 в 13:57
поделиться
  • 1
    Это работает для элементов типа theme()? (Я спрашиваю, потому что просто добавление их не сработало, поэтому я не был уверен, есть ли небольшое изменение, необходимое для вашего подхода к этим типам элементов управления элементами) ... – theforestecologist 29 May 2018 в 22:06

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

Это даст ваш ожидаемый результат:

ggplot() +
  geom_boxplot(data = dat, aes(x=id, y=val)) +
  geom_point(data = dat, aes(x=id, y=val)) 

Это приведет к вашему неправильному выводу:

ggplot() +
  geom_point(data = dat, aes(x=id, y=val)) +
  geom_boxplot(data = dat, aes(x=id, y=val)) 

Я думаю, что это также ответит на ваш бонусный вопрос: )

-4
ответ дан joemienko 21 August 2018 в 13:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: