ggtern禁用ggplot2中的一些主题

时间:2016-07-18 17:22:38

标签: r ggplot2 ggtern

尝试将主题切换为theme_bw()无效,theme_grey()似乎优先考虑。有什么想法吗?

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中的很多主题。

3 个答案:

答案 0 :(得分:3)

ggtern屏蔽theme_bw(),表示ggtern有自己的theme_bw()版本会覆盖ggplot2版本。奇怪的是,ggtern的{​​{1}}版本看起来像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版本2.1.2及更早版本中,但冲突不再发生在版本2.1.3,所以您需要做的就是更新到最新版本的ggtern。有关详细信息,请参阅@ NicolasHamilton的答案。

答案 1 :(得分:3)

来自ggplot2的

ggtern掩码每个默认主题,这是因为在编写此软件时,已经创建了约60个新的主题元素,这些元素的存在是为了使{{1正确渲染。有关新主题元素的完整列表,请运行以下命令:

ggtern

说完上面的内容后,我发现了一些冲突,正如你已经确定的那样,由于library(ggtern) ?theme_elements 也修改了一些基本主题元素,而且由于版本ggtern,我完全重新认识 - 设计主题,以便2.1.2 - 2.1.3不再修改任何基本元素 - 希望这种烦人的行为现在已经消失了!

我正在制作包装上的出版物,并且已经改进了许多长期烦恼,所以请从我的{{3下载并安装最新版本(ggtern) }})。令人尴尬的是,即使是CRAN上的最后一个2.1.4版本,在2.1.3类型情况下运行两个图时,我也发现了一个非常重要的错误。这是剪贴蒙版的一个问题,已解决的问题grid.arrange已发送到CRAN,我计划立即执行。

无论如何,要回答你的问题,请升级你的版本,你正在运行版本in 2.1.4,这是在2.1.0进行大幅修订后不久发布的版本 - 事实上,不久之前以前的版本被严重破坏,需要几乎整个ggplot2的重写,所以拥有完美的主题是我最不重要的。在最近的版本中,由于我有时间来改进和识别问题,所以这个行为应该已经解决了 - 通过以下两(2)个命令运行(按照这个顺序,来自一个干净的会话)来证明,除了标题的明显差异应该产生相同的结果:

ggtern

Bitbucket Repository

ggplot2version

如果我可以这么说,这可能看起来有点偏离主题,但实际上这个问题最初只是通过几度分离而产生的。 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需要一个,因为它需要在矩形视口中的三角形形状的多边形区域内渲染 - 众所周知,< em>&#39;三角形不适合方孔&#39; 或者说谚语!当轴限制减小时,数据映射可以并且通常确实位于三角形区域之外,并且这些数据映射需要被删除或屏蔽(或者如果用户愿意则显示)。删除不是一个选项,因为它会影响某些绘图,如多边形,路径,密度或等高线图(我认为可能点几何是唯一不受影响的几何),这只留下一个选项 - 剪切蒙版的实现。在一些早期版本中,没有实现剪贴蒙版(有利于对数据进行子集化),因此需要修改基本主题元素。如果说任何事情,也许是一个初期的糟糕设计,已经在很多世代后流到令人沮丧的行为。

答案 2 :(得分:1)

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

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