【问题标题】:artefact grey lines in background of plot ggplot2 grid.arrange R Mac OSx quartz图 ggplot2 grid.arrange R Mac OSx 石英背景中的伪影灰线
【发布时间】:2016-05-01 02:14:22
【问题描述】:

我正在使用 ggplot2 在运行 elcapitan 的 Mac 上创建森林图。 背景中有微弱的垂直线——这些不是网格线。这是“主题”设置:

theme_set(theme_bw())
theme_update(
    axis.line = element_line(colour = "black"),
    axis.line.y=element_line(colour="white"),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.border = element_blank(),
    panel.background = element_blank(),
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    plot.margin = unit(c(0,0,0,0), "lines")
)

关于如何摆脱这些灰线的任何想法? 我是使用这个板和 R 和 ggplot2 的新手—— 很高兴加载示例数据和我的代码——但不确定这里是否有用。

剧情截图:

更新以回应 Diego 的代码问题:

此代码基于 Matt's Stats 和其他东西的代码 -- https://mcfromnz.wordpress.com/2012/11/06/forest-plots-in-r-ggplot-with-side-table/ -- 但我找不到他原始代码的链接。

theme_set(theme_bw())
theme_update(
    axis.line = element_line(colour = "black"),
    axis.line.y=element_line(colour="white"),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.border = element_blank(),
    panel.background = element_blank(),
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    plot.margin = unit(c(0,0,0,0), "lines")
)
pD<- ggplot(datD,aes(cen,rev(author2))) + 
     geom_point(aes(fill = summary), size=1.7,shape=23,colour="black") +
     geom_errorbarh(
         aes(xmax = datD$high, xmin = datD$low, colour=summary),
         height = 0.3, size=0.25) +
     scale_x_continuous(
         breaks = seq(0,1,.1), labels = seq(0,100,10)) +
     labs(x="Risk, %", y="") +
     theme(axis.text.x=element_text(size=2))+geom_text(aes(0, author2), label=(paste(rev(datD$author2),rev(datD$risk))), hjust=0, size=ifelse(rev(datD$author2)=="Heterogeneity (95% CI)",2,0), fontface="bold")

p2D<-pD+ 
    theme(legend.position = "none", 
         axis.text.x = element_text(size=6),
         axis.title = element_text(size=6,face="italic")) + 
    guides(size = FALSE) +
    geom_hline(aes(yintercept=c((length(datD$authorREF2)-0.5))))
    
#Left hand side will be author_yr, Events, Participants
  #V0 indicates how many y-axis datapoints there willbe
  #V05 spaces out the table columns on the x-axis
  #V1 is a vector of all the columns that will be in the table
lab_left1D<-data.frame(
           V0 = factor(
                 c(as.factor(1:length(datD$authorREF2))),
                 levels=c(as.factor(length(datD$authorREF2):1))
                     ), 
           V05 = rep(
                  c(1,1.25,1.5,1.7),
                  each=length(datD$authorREF2)
                     ), 
           V1 = c(c(as.character(datD$authorREF2)),
                  c(as.character(datD$Events)),
                  c(as.character(datD$patients)),
                  c(as.character(datD$risk))))

data_table_left1D<-ggplot(lab_left1D, 
                        aes(x = V05, y = V0, 
                        label = format(V1, nsmall = 1))) +
                 geom_text(
                  aes(fontface = 
                        ifelse(
                          V0==as.character((length(datD$authorREF2)-1)),'bold.italic',
                          ifelse(V0=='1','bold',
                          ifelse(V0==as.character
                                       (length(datD$authorREF2)),'italic','plain')))),

                       size = ifelse(
                       lab_left1D$V0==as.character(length(datD$authorREF2)),0,2),                                   hjust=0, vjust=1.3) +                   theme_bw() +
                  theme(panel.grid.major = element_blank(), 
                     legend.position = "none",
                     panel.border = element_blank(),
                     #axis.line = element_line(colour = "black"), 
                     axis.text.x = element_text(colour="white"),#element_blank(),
                     axis.text.y = element_blank(), 
                     axis.ticks = element_line(colour="white"),#element_blank(),
                     plot.margin = unit(c(0.5,0,0,0), "lines")) +
                     labs(x="",y="") +
                  coord_cartesian(xlim=c(1,2.5))

grid.arrange(data_table_left1D, p2D,widths=c(5,3))

dev.off()

【问题讨论】:

  • 当然看起来左边的 ggplot 仍然设置了主要的网格线。如果发布实际代码而不是主题位,我们将能够真正提供帮助。我们不知道您可能在其他地方引入了主要网格线重新进入的可能性。
  • 我认为它不是网格线——我认为它与 R 在 Mac 上如何渲染成石英有关——
  • 我使用的是 Mac,这是 很多 非常有趣的格式化代码。不确定您之前是否见过this,但它有助于解释如何在 SO Q&A 论坛的 R 端工作。
  • 嗨@HanzMoleman,我是您引用的博客的作者。有趣的是,我发现这篇文章在我的博客中对其他一些情节代码(生存情节)上的一些灰线进行了故障排除。很高兴你到了那里。我会努力整理博文!

标签: r macos ggplot2 quartz-graphics


【解决方案1】:

一个最小的可重现示例比一大堆有趣的格式化和排列代码更有帮助。

library(ggplot2)
library(ggthemes)
library(gridExtra)

gg <- ggplot()
gg <- gg + geom_text(data=data.frame(x=1, y=1, label="label"),
                     aes(x, y, label=label))
gg <- gg + theme_map()
gg_left <- gg

gg <- ggplot()
gg <- gg + geom_point(data=mtcars, aes(mpg, wt))
gg <- gg + theme_bw()
gg_right <- gg

grid.arrange(gg_left, gg_right, ncol=2)

如您所见,我在 Mac 上,甚至离开了舒适的 RStudio,在 R.app 中进行测试以生成“纯 Quartz 窗口”。

我会重新组织你的代码,让核心情节正常工作,然后应用你想要的主题而不是依赖剪切和粘贴代码。

【讨论】:

  • 感谢您对问题的指导以及如何解决这个问题的建议
  • Hrbrmstr——你太棒了——它们是出现的网格线,因为我没有包含 panel.grid.minor=element_blank()。您关于如何系统地解决这个问题的建议是一个很好的学习点 - 谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多