«Игнорируя неизвестную эстетику: z и zend», но схожу с ума без z и zend

При использовании библиотеки ggtern для построения данных в симплексе R продолжает выдавать мне предупреждение

      In ggplot2::geom_segment(data = lines, ggplot2::aes(x = x1, y = x2,  :
  Ignoring unknown aesthetics: z and zend

Если я удалю z и zend, выдаст ошибку

      Error in FUN(X[[i]], ...) : object 'V3' not found.

Вот код для воспроизводимости

      my_matrix <- matrix(c(0.000000, 0.000000, 1.000000,
                      0.666666, 0.000001, 0.333333,
                      1.000000, 0.000000, 0.000000,
                      0.000001, 0.333333, 0.666667,
                      0.333334, 0.333335, 0.333331,
                      0.333332, 0.666668, 0.000000,
                      0.000000, 0.666666, 0.333334,
                      0.666667, 0.333333, 0.000000,
                      0.000000, 1.000000, 0.000000,
                      0.333333, 0.000001, 0.666665),
                    nrow = 10, ncol = 3, byrow = TRUE)

design <- as.data.frame(my_matrix)
lines <- data.frame(x1 = c(0.5, 0, 0.5),
                    x2 = c(0.5, 0.5, 0),
                    x3 = c(0, 0.5, 0.5),
                    xend = c(1, 1, 1)/3,
                    yend = c(1, 1, 1)/3,
                    zend = c(1, 1, 1)/3)
ggtern::ggtern(design, ggplot2::aes(x = V1, y = V2, z = V3)) +
  ggplot2::geom_point(size = 3, color = "blue") +
  ggplot2::geom_segment(data = lines, ggplot2::aes(x = x1, y = x2,
                                                   xend = xend, yend = yend),
                        color = "grey", size = 0.2) +
  ggplot2::theme_bw() + ggtern::theme_nomask() + ggtern::theme_clockwise()

Я знаюpackage::function()синтаксис очень раздражает, я пишу это для функции построения графиков в игрушечном пакете R, поэтому нетlibrary(ggplot2)иlibrary(ggtern).

Итак, есть ли какие-нибудь советы, как убрать это предупреждение? Что я делаю не так? Связано ли это с тем, что ggtern устарел?

Я использую ggplot2 версии 3.4.1 и ggtern 3.4.1.

1 ответ

Похоже, что ggtern переопределяет отображение нормалей геометрии и требует, чтобы каждый слой был выражен в координатах x/y/z, тогда как обычно им просто нужно x/y. Итак, geom_segment нуждается в и . Ваш глобальныйaes()вggternстрока говорит, что будет найдена вV3столбец, но не имеет этого столбца, что приводит к ошибке. Нам нужно указать, где находитсяzиzendбудет найден вlinesданные.

      ggtern::ggtern(design, ggplot2::aes(x = V1, y = V2, z = V3)) +
  ggplot2::geom_point(size = 3, color = "blue") +
  ggplot2::geom_segment(data = lines, ggplot2::aes(x = x1, y = x2, z = x3, 
                        xend = xend, yend = yend, zend = zend), 
                        color = "grey", size = 0.2) +
  ggplot2::theme_bw() + ggtern::theme_nomask() + ggtern::theme_clockwise()

Другие вопросы по тегам