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())
vsgrid.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')