ggtern отключает некоторые темы из ggplot2
Попытка переключить тему на theme_bw()
не работает, theme_grey()
кажется приоритетным. Есть идеи почему?
ggplot(data=mpg,aes(y=year,x=cyl)) + geom_point() + theme_bw()
РЕДАКТИРОВАТЬ:
Как предлагается в комментариях, это работает при запуске в чистом сеансе R. Но когда я реализую код в сеансе с ggtern
загружен, проблема всплывает.
library(ggplot2)
#Warning message:
#package ‘ggplot2’ was built under R version 3.2.5
ggplot(data=mpg,aes(y=year,x=cyl)) + geom_point() + theme_bw()
# sessionInfo()
# R version 3.2.2 (2015-08-14)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows 8 x64 (build 9200)
#
# locale:
# [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
# [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
# [5] LC_TIME=English_United States.1252
#
# attached base packages:
# [1] stats graphics grDevices utils datasets methods base
#
# other attached packages:
# [1] ggplot2_2.1.0
#
# loaded via a namespace (and not attached):
# [1] labeling_0.3 colorspace_1.2-6 scales_0.4.0 plyr_1.8.3 tools_3.2.2 gtable_0.1.2
# [7] Rcpp_0.12.2 grid_3.2.2 munsell_0.4.2
library(ggtern)
#Loading required package: ggplot2
#Attaching package: ‘ggtern’
#The following objects are masked from ‘package:ggplot2’:
#aes, calc_element, ggplot, ggplot_build, ggplot_gtable, ggplotGrob, ggsave, is.ggplot, layer_data,
#layer_grob, layer_scales, theme, theme_bw, theme_classic, theme_dark, theme_get, theme_gray,
#theme_light, theme_linedraw, theme_minimal, theme_set, theme_void
#Warning messages:
#1: package ‘ggtern’ was built under R version 3.2.5
#2: package ‘ggplot2’ was built under R version 3.2.5
ggplot(data=mpg,aes(y=year,x=cyl)) + geom_point() + theme_bw()
# sessionInfo()
# R version 3.2.2 (2015-08-14)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows 8 x64 (build 9200)
#
# locale:
# [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
# [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
# [5] LC_TIME=English_United States.1252
#
# attached base packages:
# [1] stats graphics grDevices utils datasets methods base
#
# other attached packages:
# [1] ggtern_2.1.1 ggplot2_2.1.0
#
# loaded via a namespace (and not attached):
# [1] Rcpp_0.12.2 lattice_0.20-33 MASS_7.3-45 grid_3.2.2 plyr_1.8.3
# [6] bayesm_3.0-2 gtable_0.1.2 magrittr_1.5 scales_0.4.0 stringi_1.0-1
# [11] compositions_1.40-1 robustbase_0.92-5 latex2exp_0.4.0 boot_1.3-17 labeling_0.3
# [16] proto_0.3-10 tools_3.2.2 stringr_1.0.0 energy_1.6.2 DEoptimR_1.0-4
# [21] munsell_0.4.2 colorspace_1.2-6 tensorA_0.36 gridExtra_2.0.0
Похоже, ggtern маскирует множество тем из ggplot2.
3 ответа
ggtern
маскирует КАЖДУЮ тему по умолчанию от ggplot2, и это потому, что при написании этого программного обеспечения было создано около 60 новых элементов темы, которые существуют для того, чтобы ggtern
сделать правильно. Чтобы получить полный список новых элементов темы, выполните следующую команду:
library(ggtern)
?theme_elements
Сказав выше, я знал о некоторых столкновениях, как вы определили, из-за ggtern
также изменяет некоторые базовые элементы темы, а также о версии 2.1.2 - 2.1.3
Я полностью переработал темы так, чтобы ggtern
больше не изменяет ни один из базовых элементов - надеюсь, это раздражающее поведение исчезло навсегда!
Я нахожусь в процессе подготовки публикации о пакете, и я уточняю многие многие долгосрочные неприятности, поэтому, пожалуйста, загрузите и установите самую последнюю версию (2.1.4
) из моего ( хранилище битбакетов). Смущающе даже последнее 2.1.3
версия на CRAN, я обнаружил довольно значительную ошибку при запуске двух графиков в grid.arrange
Тип ситуации. Это проблема с обтравочной маской, и что-то, что было решено in 2.1.4
пока что отправили в CRAN, что я планирую сделать в ближайшее время.
В любом случае, чтобы ответить на ваш вопрос, пожалуйста, обновите свою версию, вы используете версию 2.1.0
, которая была выпущена вскоре после ОГРОМНОЙ редакции в ggplot2
- на самом деле, не так давно, предыдущие версии были настолько сильно сломаны, что требовало почти всего переписывания ggtern
Поэтому идеальные темы были наименьшим из моих приоритетов. В последних версиях, поскольку у меня было время для уточнения и выявления проблем, это поведение должно было быть решено - продемонстрировано следующими двумя (2) командами (в этом порядке, из чистого сеанса), которые, за исключением Очевидная разница в названиях, должна давать одинаковые результаты:
library(ggplot2)
ggplot(data=mpg,aes(y=year,x=cyl)) +
geom_point() + theme_bw() +
labs(title='From ggplot2')
library(ggtern)
ggplot(data=mpg,aes(y=year,x=cyl)) +
geom_point() + theme_bw() +
labs(title='From ggtern')
Если я могу просто сказать, это может показаться немного не по теме, но на самом деле вся эта проблема изначально возникла из-за пары степеней отделения от одного. ggplot2
был спроектирован без обтравочных масок, он использует видовую область сетки как по существу псевдо обтравочную маску, потому что все ее графики (за исключением полярного преобразования) отображаются в прямоугольной области. Отображения данных, которые находятся за пределами прямоугольной области, впоследствии отбрасываются в окне просмотра. ggtern
с другой стороны, он нужен, потому что он должен отображаться в многоугольной области треугольной формы, размещенной в прямоугольном окне просмотра - и, как всем известно, "треугольники не помещаются в квадратные отверстия" или, как говорится в поговорке! Когда пределы оси уменьшены, отображения данных могут и часто находятся вне треугольной области, и они должны быть либо удалены, либо замаскированы (или показаны, если пользователь этого пожелает). Удаление - это не вариант, так как это может повлиять на некоторые графики, такие как полигоны, пути, плотности или контурные графики (я думаю, что точечные геометрии - единственные, на которые это потенциально не влияет), что оставляет только один вариант - реализацию маски отсечения., В некоторых более ранних версиях маска отсечения не была реализована (в пользу поднабора данных), поэтому требовались модификации элементов базовой темы. Во всяком случае, возможно, первоначальный "плохой дизайн" перешел во многих поколениях к разочаровывающему поведению.
ggtern
маски theme_bw()
, означающий, что ggtern
имеет свою версию theme_bw()
который отменяет ggplot2
версия. Как ни странно, ggtern
версия theme_bw()
похоже theme_grey()
так что, возможно, это ошибка.
Если вы хотите сохранить ggtern
загружен, другой вариант заключается в обеспечении ggplot2
версия theme_bw()
:
ggplot(data=mpg,aes(y=year,x=cyl)) + geom_point() + ggplot2::theme_bw()
К сожалению, вы не можете просто загрузить ggplot2
после загрузки ggtern
(чтобы избежать проблемы маскировки), потому что ggtern
грузы ggplot2
,
Чтобы увидеть разницу в коде для каждой версии theme_bw()
введите в консоли следующее:
ggplot2::theme_bw
ggtern::theme_bw
ОБНОВЛЕНИЕ: вышеупомянутое столкновение между темами в ggplot2
а также ggtern
произошло в ggtern
версии 2.1.2 и более ранних, но столкновение больше не происходит в версии 2.1.3, поэтому все, что вам нужно сделать, это обновить до последней версии ggtern
, Смотрите @NicolasHamilton ответ для более подробной информации.
Я решил свою проблему, отсоединив ggtern.
detach("package:ggtern",unload=T)