2016-07-18 3 views
2

Попытка переключить тему на theme_bw() не работает, theme_grey() кажется приоритетным. Любые идеи почему?ggtern отключает некоторые темы от ggplot2

ggplot(data=mpg,aes(y=year,x=cyl)) + geom_point() + theme_bw() 

enter image description here

EDIT:

Как указывается в комментариях, это работает при запуске в чистой 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 

enter image description here

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  

enter image description here

Похоже ggtern маски много тем из ggplot2.

+4

Я не могу воспроизвести это поведение. Возможно, вы захотите попробовать еще раз на чистом сеансе, и если он по-прежнему сохраняется, разделите свои версии R и ggplot2 и платформу, на которой вы находитесь. – joran

+0

Это должно сработать. Предоставьте свой sessionInfo(). – Roland

+0

Это похоже на привязку к ggtern. –

ответ

3

ggtern маски КАЖДАЯ тема по умолчанию от ggplot2, и это потому, что при написании этой программы, некоторые ~ 60 новые тематические элементы были созданы, которые существуют для того, чтобы сделать ggtern отображаться корректно.Для полного списка новых тематических элементов, выполните следующую команду:

Сказав выше, я был осведомлен о некоторых столкновениях, как вы определили, из-за ggtern также модификацию некоторых базовых элементов темы , а так как около версии 2.1.2 - 2.1.3, я полностью переработал темы, так что ggtern больше не изменяет ни один из базовых элементов - надеюсь, это раздражающее поведение теперь ушло навсегда!

Я собираюсь опубликовать публикацию на упаковке и усовершенствовал многие из многих досадных неприятностей, поэтому загрузите и установите самую последнюю версию (2.1.4) из моего (Bitbucket Repository). Смущающе, даже последняя версия 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') 

ggplot2version

ggternversion

Если я могу только сказать, что это может показаться немного не по теме, но вся эта проблема на самом деле изначально из-за нескольких степеней разделения, от одной вещи. ggplot2 был разработан без обтравочных масок, он использует видовое окно сетки как по существу псевдообъемную маску, потому что все ее графики (за исключением полярного преобразования) отображаются на прямоугольной области. Отображения данных, которые лежат вне прямоугольной области, впоследствии отбрасываются окном просмотра. ggtern с другой стороны, нуждается в один, потому что он должен оказывать в пределах треугольной формы многоугольника области размещалась в прямоугольной видовом - и, как все знают, «треугольники не помещаются в квадратные отверстия» или однако говорит идет! Когда ограничения по оси уменьшаются, сопоставления данных могут и часто выполняются за пределами треугольной области, и их необходимо либо удалить, либо замаскировать (или показать, если пользователь этого пожелает). Удаление не является опцией, так как это повлияло бы на определенные графики, такие как полигоны, траектории, плотности или контурные графики (я думаю, вероятно, что геометрия точек - это единственные, которые не могут быть затронуты), что оставляет только один вариант - реализация обтравочной маски , В некоторых из более ранних версий обрезающая маска не была реализована (в пользу подмножества данных), что требует модификации базовых элементов темы. Во всяком случае, возможно, первоначальный «плохой дизайн», потекший на многие поколения позже, разочаровывает.

+0

Спасибо подробный ответ! Оказывается, я использовал версию 2.1.2, когда написал свой ответ пару часов назад.Теперь я обновлен до версии 2.1.3, последней версии CRAN, и больше нет столкновения с 'ggplot :: theme_bw()'. – eipi10

+0

Нет проблем. Просто обратите внимание на ошибку, о которой я упоминал в 2.1.3, вы можете увидеть это простым 'grid.arrange (ggtern(), ggtern())' vs 'grid.arrange (ggtern(), ggtern() + theme_nomask()) ', в скором времени повторная передача в CRAN, в то время,' 2.1.4' будет доступна в режиме битбакет-репо. –

+0

Спасибо, @NicholasHamilton. Я действительно оценил ggtern, спасибо за вашу работу, чтобы улучшить его! –

1

Я решил проблему, отделив ggtern.

detach("package:ggtern",unload=T)

3

ggtern маски theme_bw(), а это означает, что ggtern имеет свою собственную версию theme_bw(), который переопределяет версию ggplot2. Как ни странно, версия ggterntheme_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 

UPDATE: выше столкновение между темами в ggplot2 и ggtern произошло в ggtern версии 2.1.2 и ранее, но столкновение больше не происходит в версии 2.1.3, поэтому все, что вам нужно сделать, это обновление до последней версии ggtern. См. Ответ @ NicolasHamilton для получения полной информации.