ggplot2 plot tanpa sumbu, legenda, dll

146

Saya ingin menggunakan hexbin biokonduktor (yang dapat saya lakukan) untuk menghasilkan plot yang memenuhi seluruh wilayah tampilan (png) - tanpa sumbu, tanpa label, tanpa latar belakang, tanpa nuthin '.

pengguna1320487
sumber
1
Bukankah lebih mudah membuat plot hexbin dan memotongnya di editor gambar?
joran
4
cobatheme_void()
Brian D

Jawaban:

185

Sesuai komentar saya dalam jawaban Chase, Anda dapat menghapus banyak hal ini menggunakan 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())

Sepertinya masih ada margin kecil di sekitar tepi .png yang dihasilkan saat saya menyimpan ini. Mungkin orang lain tahu cara menghapus bahkan komponen itu.

(Catatan historis: Sejak ggplot2 versi 0.9.2, optssudah tidak digunakan lagi. Sebagai gantinya gunakan theme()dan ganti theme_blank()dengan element_blank().)

joran
sumber
1
Terimakasih banyak! Saya juga menemukan solusi serupa di groups.google.com/group/ggplot2/browse_thread/thread/…
user1320487
Komentar sepintas: Dalam beberapa kasus, theme(axis.ticks=element_blank())tidak berfungsi sebaik theme(axis.ticks.x=element_blank()), mungkin bug sementara di suatu tempat (saya memiliki set tema sendiri, lalu saya mencoba untuk menimpa: hanya axis.ticks.xdan axis.ticks.ymelakukan pekerjaan itu.)
PatrickT
109

Re: mengubah pilihan ke tema dll (untuk orang-orang malas):

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())
mbjoseph.dll
sumber
64

Jawaban saat ini tidak lengkap atau tidak efisien. Berikut ini (mungkin) cara terpendek untuk mencapai hasil (menggunakan theme_void():

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

Hasilnya adalah:

masukkan deskripsi gambar di sini


Jika Anda tertarik untuk hanya menghilangkan label , labs(x="", y="")lakukan triknya:

ggplot(data = diamonds, mapping = aes(x = clarity)) + geom_bar(aes(fill = cut)) + 
      labs(x="", y="")
luchonacho
sumber
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"))menyarankan itu tidak 100% batal
baptiste
Lab (x = "", y = "") tampaknya tidak menghilangkan sumbu, hanya labelnya.
miratrix
@ miratrix maaf, kesalahanku. Diperbarui.
luchonacho
6
@luchonacho Menggunakan labs(x="",y="")spasi pada judul sumbu karena sebenarnya ada judul, hanya saja tanpa tanda. Untuk menghapus judul sumbu dan ruang untuk mereka, lebih baik digunakan+ theme(axis.title = element_blank())
Didzis Elferts
6
labs(x = NULL)atau xlab(NULL)cara lain.
PatrickT
42
'opts' is deprecated.

sedang ggplot2 >= 0.9.2digunakan

p + theme(legend.position = "none") 
Jonas Stein
sumber
6
Saya menyadari Anda belum memiliki hak untuk mengedit, tetapi jika Anda melihat jawaban ggplot2 saya yang lain yang perlu diperbarui re: opts () jangan ragu untuk menyarankan edit. Saya akan mendapat notifikasi dan dapat menyertakannya sendiri.
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)
amaurel
sumber
Error in UseMethod("grid.draw") : no applicable method for 'grid.draw' applied to an object of class "NULL"
Roman Luštrik
grid.ls () menampilkan daftar objek viewport dan
grob
tampaknya di versi lain ggplot yang saya gunakan nama panelnya berbeda
amaurel
xy <- data.frame (x = 1: 10, y = 10: 1) plot <- ggplot (data = xy) + geom_point (aes (x = x, y = y)) panel plot = 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 (panel)
amaurel
0

Terlambat ke pesta, tetapi mungkin menarik ...

Saya menemukan kombinasi labsdan guidesspesifikasi berguna dalam banyak kasus:

Anda tidak menginginkan apa pun selain kisi dan latar belakang:

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

masukkan deskripsi gambar di sini

Anda hanya ingin menekan label tanda centang dari satu atau kedua sumbu:

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

masukkan deskripsi gambar di sini

simbolrush
sumber
0

Saya tidak menemukan solusi ini di sini. Ini menghapus semuanya menggunakan paket 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)

Perhatikan saja bahwa hal yang sama dapat dilakukan menggunakan theme.void () seperti ini:

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)
John T
sumber
-1

Apakah ini sesuai dengan keinginan Anda?

 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")
Mengejar
sumber
menghilangkan legenda tetapi sumbu x dan y, dan kisi latar belakang, masih ada.
pengguna1320487