ChatGPT解决这个技术问题 Extra ChatGPT

ggplot2 没有坐标轴、图例等的绘图

我想使用 bioconductor 的 hexbin(我可以做到)来生成一个填充整个(png)显示区域的图 - 没有轴,没有标签,没有背景,没有 nuthin'。

创建一个十六进制图并在图像编辑器中裁剪它不是更容易吗?
试试theme_void()

R
Rufflewind

根据我在 Chase 的回答中的评论,您可以使用 element_blank 删除很多此类内容:

dat <- data.frame(x=runif(10),y=runif(10))

p <- ggplot(dat, aes(x=x, y=y)) + 
        geom_point() +
        scale_x_continuous(expand=c(0,0)) + 
        scale_y_continuous(expand=c(0,0))   

p + theme(axis.line=element_blank(),axis.text.x=element_blank(),
          axis.text.y=element_blank(),axis.ticks=element_blank(),
          axis.title.x=element_blank(),
          axis.title.y=element_blank(),legend.position="none",
          panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
          panel.grid.minor=element_blank(),plot.background=element_blank())

当我保存它时,结果 .png 的边缘看起来仍然有一个小边距。也许其他人甚至知道如何删除该组件。

(历史注释:自 ggplot2 版本 0.9.2 起,opts 已被弃用。改为使用 theme() 并将 theme_blank() 替换为 element_blank()。)


非常感谢!我还在 groups.google.com/group/ggplot2/browse_thread/thread/… 找到了类似的解决方案
顺便评论:在某些情况下,theme(axis.ticks=element_blank()) 不如 theme(axis.ticks.x=element_blank()) 好用,可能是某个地方的临时错误(我有自己的主题集,然后我尝试覆盖:只有 axis.ticks.xaxis.ticks.y 做工作。)
m
mbjoseph

回复:将选项更改为主题等(对于懒惰的人):

theme(axis.line=element_blank(),
      axis.text.x=element_blank(),
      axis.text.y=element_blank(),
      axis.ticks=element_blank(),
      axis.title.x=element_blank(),
      axis.title.y=element_blank(),
      legend.position="none",
      panel.background=element_blank(),
      panel.border=element_blank(),
      panel.grid.major=element_blank(),
      panel.grid.minor=element_blank(),
      plot.background=element_blank())

尽管在另一个答案中提供的 theme_void 是实现 OP 目标的最简单方法,但如果与 facet_gridfacet_wrap 结合使用,您也会丢失构面标签周围的框。如果您不希望发生这种情况,则可以使用此答案。
l
luchonacho

当前的答案要么不完整,要么效率低下。这是(也许)实现结果的最短方法(使用 theme_void()

data(diamonds) # Data example
ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) +
      theme_void() + theme(legend.position="none")

结果是:

https://i.stack.imgur.com/N31A6.png

如果您只想消除 标签labs(x="", y="") 可以解决问题:

ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) + 
      labs(x="", y="")

ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) + theme_void() + theme(legend.position="none", panel.background = element_rect(fill="grey80"), plot.background = element_rect(fill="red")) 表明它不是 100% 无效的
labs( x="", y="" ) 似乎没有删除轴,只是删除了标签。
@miratrix 抱歉,我的错误。更新。
@luchonacho 使用 labs(x="",y="") 会留下轴标题的空间,因为实际上有标题,它们只是没有符号。要删除轴标题和空间,最好使用 + theme(axis.title = element_blank())
labs(x = NULL)xlab(NULL) 是其他方式。
J
Jonas Stein
'opts' is deprecated.

ggplot2 >= 0.9.2 使用

p + theme(legend.position = "none") 

我知道您还没有编辑权限,但是如果您发现我的其他 ggplot2 答案需要更新 re:opts() ,请随时提出编辑建议。我会收到通知,可以自己合并。
s
symbolrush

晚会迟到了,但可能会引起兴趣...

我发现 labsguides 规范的组合在许多情况下很有用:

你只需要一个网格和一个背景:

ggplot(diamonds, mapping = aes(x = clarity)) + 
  geom_bar(aes(fill = cut)) + 
  labs(x = NULL, y = NULL) + 
  guides(x = "none", y = "none")

https://i.stack.imgur.com/HQySW.png

您只想抑制一个或两个轴的刻度线标签:

ggplot(diamonds, mapping = aes(x = clarity)) + 
  geom_bar(aes(fill = cut)) + 
  guides(x = "none", y = "none")

https://i.stack.imgur.com/aHU7p.png


a
amaurel
xy <- data.frame(x=1:10, y=10:1)
plot <- ggplot(data = xy)+geom_point(aes(x = x, y = y))
plot
panel = grid.get("panel-3-3")

grid.newpage()
pushViewport(viewport(w=1, h=1, name="layout"))
pushViewport(viewport(w=1, h=1, name="panel-3-3"))
upViewport(1)
upViewport(1)
grid.draw(panel)

Error in UseMethod("grid.draw") : no applicable method for 'grid.draw' applied to an object of class "NULL"
grid.ls() 显示视口和 grob 对象的列表
看来在我使用面板名称的其他版本的ggplot中是不同的
xy <- data.frame(x=1:10, y=10:1) plot <- ggplot(data = xy)+geom_point(aes(x = x, y = y)) plot panel = grid.get(" panel-3-4") grid.newpage() pushViewport(viewport(w=1, h=1, name="layout")) pushViewport(viewport(w=1, h=1, name="panel-3- 4")) upViewport(1) upViewport(1) grid.draw(面板)
S
Sandy

使用ggeasy,更简单。

library(ggeasy)
p + theme_classic()+easy_remove_axes() + easy_remove_legend()

C
Chase

这是做你想做的吗?

 p <- ggplot(myData, aes(foo, bar)) + geom_whateverGeomYouWant(more = options) +
 p + scale_x_continuous(expand=c(0,0)) + 
 scale_y_continuous(expand=c(0,0)) +
 opts(legend.position = "none")

摆脱了图例,但 x 和 y 轴以及背景网格仍然存在。
J
John T

我在这里没有找到这个解决方案。它使用 cowplot 包删除所有这些:

library(cowplot)

p + theme_nothing() +
theme(legend.position="none") +
scale_x_continuous(expand=c(0,0)) +
scale_y_continuous(expand=c(0,0)) +
labs(x = NULL, y = NULL)

刚刚注意到可以使用 theme.void() 来完成同样的事情,如下所示:

p + theme_void() +
theme(legend.position="none") +
scale_x_continuous(expand=c(0,0)) +
scale_y_continuous(expand=c(0,0)) +
labs(x = NULL, y = NULL)