ggtern禁用ggplot2中的某些主题

ggtern禁用ggplot2中的某些主题,r,ggplot2,ggtern,R,Ggplot2,Ggtern,尝试将主题切换到theme\u bw()不起作用,theme\u grey()似乎被优先排序。你知道为什么吗 ggplot(data=mpg,aes(y=year,x=cyl)) + geom_point() + theme_bw() 编辑: 正如在注释中所建议的,当在干净的R会话中运行时,这是有效的。但是当我在加载了ggtern的会话中实现代码时,问题就出现了 library(ggplot2) #Warning message: #package ‘ggplot2’ was built u

尝试将主题切换到
theme\u bw()
不起作用,
theme\u 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 


看起来ggtern屏蔽了ggplot2中的许多主题。

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


detach(“package:ggtern,unload=T)
ggtern
屏蔽
theme\u bw()
,这意味着
ggtern
有自己的
theme\u bw()
版本,覆盖
ggplot2
版本。奇怪的是,
ggtern
版本的
theme\u bw()
看起来像
theme\u grey()
,所以这可能是个bug

如果要继续加载
ggtern
,另一个选项是强制执行
ggplot2
版本的
theme\u bw()

不幸的是,您不能在加载
ggtern
后加载
ggplot2
(以避免屏蔽问题),因为
ggtern
加载
ggplot2

要查看每个版本的
theme\u bw()
的代码差异,请在控制台中键入以下命令:

ggplot2::theme_bw

ggtern::theme_bw

更新:上述
ggplot2
ggtern
中主题之间的冲突发生在
ggtern
版本2.1.2和更早版本中,但冲突在版本2.1.3中不再发生,因此您只需更新到最新版本的
ggtern
。有关详细信息,请参见@NicolasHamilton的回答。

ggtern
屏蔽ggplot2中的每个默认主题,这是因为在编写此软件时,已经创建了约60个新的主题元素,这些元素的存在是为了使
ggtern
正确渲染。要获得新主题元素的全面列表,请运行以下命令:

library(ggtern)
?theme_elements
如上所述,我注意到一些冲突,正如您所指出的,由于
ggtern
也修改了一些基本主题元素,以及关于版本
2.1.2-2.1.3
,因此,我已经完全重新设计了主题,这样
ggtern
就不再修改任何基本元素了——希望这种恼人的行为现在已经永远消失了

我正在制作关于该软件包的出版物,并一直在改进许多长期困扰,因此请从my()下载并安装最新版本(
2.1.4
)。令人尴尬的是,即使是CRAN上的最后一个
2.1.3
版本,我在
网格中运行两个绘图时也发现了一个相当严重的错误。这是剪辑掩码的问题,在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
设计时没有剪裁遮罩,它使用栅格视口基本上是一个伪剪裁遮罩,因为其所有绘图(极坐标变换除外)都在矩形区域上渲染。位于矩形区域之外的数据映射随后将被视口丢弃<另一方面,code>ggtern
需要一个,因为它需要在矩形视口中的三角形形状的多边形区域内进行渲染,正如大家所知,“三角形不适合方孔”或者俗语所说的那样!当轴限制减小时,数据映射可以而且经常位于三角形区域之外,并且需要删除或屏蔽这些映射(如果用户愿意,也可以显示)。删除不是一个选项,因为它会影响某些图,如多边形图、路径图、密度图或等高线图(我认为可能只有点几何图形不会受到潜在影响),这只剩下一个选项——实现剪裁遮罩。在一些早期版本中,没有实现剪辑掩码(有利于对数据进行子集设置),因此需要修改基本主题元素。如果说有什么问题的话,也许是最初的“拙劣设计”,在很多代人之后都演变成了令人沮丧的行为。

我无法重现这种行为。您可能希望在干净的会话中重试,如果仍然存在,请共享您的R和ggplot2版本以及您所在的平台。这应该可以工作。请提供您的sessionInfo()。这似乎与ggtern有关。谢谢详细的回答!事实证明,我在几个小时前写答案时使用的是2.1.2版。我现在已经更新到2.1.3,最新的CRAN版本,并且不再与
ggplot::theme\u bw()
冲突。没有问题。请注意我在2.1.3中提到的bug,您可以通过简单的
grid.arrange(ggtern(),ggtern())
vs
grid.arrange(ggtern(),ggtern()+主题词nomask())
,很快将重新提交给CRAN,在此期间,
2.1.4
可在bitbucket repo上获得。谢谢,@NicholasHamilton。我真的很感激格特恩,那
library(ggtern)
?theme_elements
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')