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.