plot ggplot2 sem eixos, legendas, etc


139

Eu quero usar o hexbin do biocondutor (o que eu posso fazer) para gerar um gráfico que preencha toda a região de exibição (png) - sem eixos, sem rótulos, sem fundo, sem nada.


1
Não seria mais fácil criar um gráfico de hexbin e cortá-lo em um editor de imagens?
precisa

3
tentetheme_void()
Brian D

Respostas:


182

Conforme meu comentário na resposta de Chase, você pode remover muitas dessas coisas usando 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())

Parece que ainda há uma pequena margem em torno da borda do .png resultante quando eu salvo isso. Talvez alguém saiba como remover até esse componente.

(Nota histórica: Desde a versão 0.9.2 do ggplot2 , optsfoi preterido. Em vez disso, use theme()e substitua theme_blank()por element_blank().)


1
Muito Obrigado! Também encontrei uma solução semelhante em groups.google.com/group/ggplot2/browse_thread/thread/…
user1320487

Comentário de passagem: Em alguns casos, theme(axis.ticks=element_blank())não funciona, bem como theme(axis.ticks.x=element_blank()), provavelmente, um lugar bug temporário (eu tenho o meu próprio conjunto tema, então eu tentar substituir: somente axis.ticks.xe axis.ticks.yfazer o trabalho.)
PatrickT

106

Re: mudar opta para o tema etc (para pessoas preguiçosas):

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())

59

As respostas atuais são incompletas ou ineficientes. Aqui está (talvez) o caminho mais curto para alcançar o resultado (usando theme_void():

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

O resultado é:

insira a descrição da imagem aqui


Se você estiver interessado apenas em eliminar os rótulos , labs(x="", y="")faça o truque:

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"))sugere que ele não é 100% nulo
baptiste

Os laboratórios (x = "", y = "") não parecem remover os eixos, apenas os rótulos.
miratrix

@miratrix desculpe, meu erro. Atualizada.
Luchonacho

5
@luchonacho O uso de labs(x="",y="")folhas no espaço dos títulos dos eixos, porque na verdade existem títulos, eles são apenas sem sinais. Para remover os títulos dos eixos e o espaço para eles, é melhor usá-los.+ theme(axis.title = element_blank())
Didzis Elferts

6
labs(x = NULL)ou xlab(NULL)são outras maneiras.
precisa saber é o seguinte

42
'opts' is deprecated.

em ggplot2 >= 0.9.2uso

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

6
Sei que você ainda não tem privilégios de edição, mas se encontrar outras respostas minhas do ggplot2 que precisam ser atualizadas, re: opts () fique à vontade para sugerir uma edição. Receberei uma notificação e posso incorporá-la.
joran

3
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"
Roman Luštrik

grid.ls () exibir a lista de janela de visualização e Grob objetos
amaurel

parece que em outra versão do ggplot que eu estou usando o nome do painel é diferente
amaurel

xy <- data.frame (x = 1: 10, y = 10: 1) plot <- ggplot (data = xy) + geom_point (aes (x = x, y = y)) painel de plotagem = grid.get (" panel-3-4 ") grid.newpage () pushViewport (viewport (w = 1, h = 1, nome =" layout ")) pushViewport (viewport (w = 1, h = 1, nome =" panel-3- 4 ")) upViewport (1) upViewport (1) grid.draw (painel)
amaurel

-1

Isso faz o que você quer?

 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")

se livra da legenda, mas os eixos xey, e a grade de fundo, ainda estão lá.
User1320487
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.