更改特定网格线ggplot2 R脚本的颜色

时间:2018-04-11 22:50:40

标签: r ggplot2 boxplot rscript

我一直试图用ggplot2绘制我的双向交互式箱图,到目前为止我还是非常成功。由于我希望观众能够根据它们是负面和正面来比较结果,我认为在y = 0时改变网格线的颜色会很简洁;我搜索了很多,我在网上找不到任何类似的问题。我甚至试图自己操纵主题()功能。

我意识到小网格线不能有标签,如果小网格线和主网格线重叠,该线将继承主线的主题特征。所以,我可以将y = 0转换为没有任何标签的次网格线,或者我可以将y = 0作为主线但是其余的将是次要的,因此,没有显示标签。 (我显然不希望所有的网格线都比y = 0更暗,因为那时它不会非常明显。

下图显示了第一个方案:

y=0 as a minor line but no labels

p + scale_y_continuous(expand = c(0, 0), breaks = c(-40, 40, -20, 20), minor_breaks = c(0))  
  +theme(panel.grid.minor.y = element_line(color="#54545B"))

此图表显示第二种情况:

y=0 as major line but then the rest are minors and thus, no labels!

p + scale_y_continuous(expand = c(0, 0), breaks = seq(-40, 40, 40), minor_breaks = c(-20, 20)) 
  +theme(panel.grid.major.y = element_line(color="#54545B"))

有没有人有同样的问题?如果不使用Photoshop(手动操作图表),有没有什么好的解决方案呢?

2 个答案:

答案 0 :(得分:1)

我使用geom_hline(yintercept = 0)。在geom_boxplot之前指定它,因为它位于框下方的图层中。

示例数据:

set.seed(123)
data.frame(x = rep(c("A", "B"), each = 10), 
           y = sample(-100:100, 20, replace = TRUE)) %>% 
ggplot(aes(x, y)) + 
  geom_hline(yintercept = 0) + 
  geom_boxplot()

enter image description here

答案 1 :(得分:0)

除了neilfws的回复之外,还要将您的颜色代码添加到geom_hline()中的set.seed(123) data.frame(x = rep(c("A", "B"), each = 10), y = sample(-100:100, 20, replace = TRUE)) %>% ggplot(aes(x, y)) + geom_hline(yintercept = 0,color="#54545B") + geom_boxplot() 参数中。我编辑了neilfw的代码,包括:

<snippet>
    <content><![CDATA[
\documentclass{article}
\usepackage{amsmath}

\title{${1:title}}
\author{...}
\date{[Todays date here automatically]}

\begin{document}
\maketitle

$0

\end{document}
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>document</tabTrigger> -->
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <scope>text.tex.latex</scope> -->
</snippet>