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 '.


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


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

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

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

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)

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


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)

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

menghilangkan legenda tetapi sumbu x dan y, dan kisi latar belakang, masih ada.
— pengguna1320487
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.