2016-07-18 104 views
2

尝试将主题切换为theme_bw()不起作用,theme_grey()似乎优先。任何想法为什么?ggtern禁用ggplot2中的某些主题

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

enter image description here

编辑

正如意见建议,这在清洁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 EVERY默认的主题,这是因为写这个软件的时候,已经创造了一些〜60个新的主题元素,其中存在为了使ggtern正确呈现。对于新的主题元素的完整列表,请运行以下命令:

说了上面,我意识到了一些冲突,因为你已经确定,由于ggtern也修改一些基本主题元素,并且从版本2.1.2 - 2.1.3开始,我完全重新设计了主题,以便ggtern不再修改任何基本元素 - 希望这种恼人的行为现在已经消失!

我正在制作包装上的出版物,并且已经完善了许多许多长期烦恼,因此请从我的(Bitbucket Repository)下载并安装最新版本(2.1.4)。令人尴尬的是,即使是CRAN上的最后一个2.1.3版本,我在grid.arrange类型的情况下运行两个图时也遇到了一个相当显着的错误。这是剪贴蒙版的问题,并且已经解决了一些问题,但尚未发送给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版本。我现在已经更新到最新的CRAN版本2.1.3,并且不再与'ggplot :: theme_bw()'发生冲突。 – eipi10

+0

没问题。只要知道我在2.1.3中提到的错误,你可以通过简单的'grid.arrange(ggtern(),ggtern())'和'grid.arrange(ggtern(),ggtern()+ theme_nomask() )',很快就要重新提交给CRAN,在此期间,''2.1.4'在bitbucket repo上可用。 –

+0

谢谢@NicholasHamilton。我真的很感激ggtern,感谢你的工作来改进它! –

1

我解决了我的问题,通过分离ggtern。

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

3

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() 

不幸的是,装载ggtern(避免遮蔽问题),因为以后你不能只加载ggplot2ggtern加载ggplot2

要查看的代码中的差异为theme_bw()类型的每个版本在控制台以下:

ggplot2::theme_bw 

ggtern::theme_bw 

UPDATE:上述主题之间在ggplot2ggtern冲突发生在ggtern版本2.1.2和更早的版本,但是版本2.1.3中不再发生冲突,所以您只需更新到最新版本ggtern。请参阅@ NicolasHamilton的答案了解详细信息。