Kesalahan dalam plot.new (): margin gambar terlalu besar di R

111

Saya baru mengenal R tetapi saya telah membuat banyak plot korelasi dengan kumpulan data yang lebih kecil. Namun, ketika saya mencoba memplot kumpulan data besar (2gb +), saya dapat menghasilkan plot dengan baik, tetapi legenda tidak muncul. Ada saran? atau alternatif?

library(gplots)
r.cor <- cor(r)
layout(matrix(c(1,1,1,1,1,1,1,1,2,2), 5, 2, byrow = TRUE))
par(oma=c(5,7,1,1))
cx <- rev(colorpanel(25,"yellow","black","blue"))
leg <- seq(min(r.cor,na.rm=T),max(r.cor,na.rm=T),length=10)
image(r.cor,main="Correlation plot Normal/Tumor data",axes=F,col=cx)
axis(1, at=seq(0,1,length=ncol(r.cor)), labels=dimnames(r.cor)[[2]], 
    cex.axis=0.9,las=2)
axis(2,at=seq(0,1,length=ncol(r.cor)), labels=dimnames(r.cor)[[2]],
     cex.axis=0.9,las=2)
image(as.matrix(leg),col=cx,axes=T)     

Kesalahan dalam plot.new(): margin gambar terlalu besar

tmp <- round(leg,2)
axis(1,at=seq(0,1,length=length(leg)), labels=tmp,cex.axis=1)
Steve Hwang
sumber
1
Anda harus memberi kami contoh yang dapat direproduksi yang menunjukkan penyakit yang Anda alami. stackoverflow.com/questions/12765668/…
Roman Luštrik
Saya mencoba semua cara di atas, dan tidak ada yang berhasil. Namun, sesekali (setidaknya untuk pemula seperti saya), data dalam matriks atau data.frame dapat dipaksakan menjadi beberapa jenis yang tidak Anda sadari. Jika demikian, gunakan "as.numeric" sebelum data Anda untuk memastikan ini bukan masalahnya.
pApaAPPApapapa

Jawaban:

86

Saya menduga masalahnya adalah bahwa area angka kecil 2 yang dibuat oleh layout()panggilan Anda tidak cukup besar untuk memuat hanya margin default, apalagi plot.

Sebelum garis yang menyebabkan masalah coba:

par(mar = rep(2, 4))

lalu plot gambar kedua

image(as.matrix(leg),col=cx,axes=T)

Anda harus bermain-main dengan ukuran margin di file par() panggilan yang saya tunjukkan untuk mendapatkan hak ini. Anda mungkin juga perlu menambah ukuran perangkat sebenarnya yang Anda rencanakan.

Tip terakhir, simpan par()default sebelum mengubahnya, jadi ubah par()panggilan Anda yang ada ke:

op <- par(oma=c(5,7,1,1))

kemudian di akhir plotting lakukan

par(op)
Gavin Simpson
sumber
Ah, terima kasih atas klarifikasinya. Saya memanipulasi layout (matrix ()) sebagai gantinya. Hargai bantuannya!
Steve Hwang
2
ini adalah petunjuk yang tepat untuk saya. Saya harus memperbesar ukuran gambar, atau menurunkan resolusi dipng(filename="myfile.png", res=150, width = 1000, height = 1000)
vanao veneri
146

Kesalahan ini dapat terjadi di Rstudio hanya karena panel "Plot" Anda hampir tidak terlalu kecil. Coba perbesar "File, Plot, Paket, Bantuan, Penampil" Anda dan lihat apakah itu membantu!

Steve Pitchers
sumber
8
Ini memecahkan masalah saya! Saya telah memperluas jendela "Lingkungan", mengecilkan jendela "Plot", dll. Saya hanya perlu memperluas jendela. Terima kasih!
Rock Lee
Setuju, ini memengaruhi RStudio saya juga, dan hanya memperluas jendela membantu.
Kingz
Kadang-kadang saya tidak sengaja berakhir dengan sejumlah panel karena menggunakan par (). par(mfrow=c(1,1))dapat mengatur ulang Anda ke satu panel.
Matt
1
itu adalah kesalahan yang sangat aneh bagi saya karena saya baru mengenal R. Tidak pernah mengalami masalah sebelumnya dengan bahasa / IDE lain di mana tata letak IDE akan memengaruhi kode saya !!
Adarsha
Luar biasa, ini juga berhasil untuk saya. Namun kesalahan yang aneh!
Mohammad
70

Jika Anda mendapatkan pesan ini di RStudio, mengklik gambar 'sapu' "Bersihkan Semua Plot" di tab Plot dan mencoba plot () lagi mungkin berhasil.

masukkan deskripsi gambar di sini

Justas
sumber
1
Ini jawaban terbaik.
NewbieDave
15
graphics.off()
rawr
Saya suka jawaban ini
O.rka
Ini benar-benar jawaban terbaik. Terima kasih.
merve bıçakçı
24

Ini terkadang terjadi di RStudio. Untuk mengatasinya, Anda dapat mencoba merencanakan ke jendela eksternal (khusus Windows):

windows() ## create window to plot your file
## ... your plotting code here ...
dev.off() 
jobligado
sumber
1
Ini adalah jawaban yang lebih baik daripada membeli monitor yang lebih besar. Ada juga perintah x11 () yang seharusnya berfungsi di Linux.
Ron Jensen - Kita semua adalah Monica
1
Jawaban paling tepat yang pernah ada. Terima kasih.
TeeKea
ada yang setara untuk MacOSX?
TeYaP
Saya mencoba solusi ini ketika saya mendapatkan Error in plot.new() : figure margins too largekesalahan di RStudio saat menggambar OLS-CUSUM, dan itu bekerja secara ajaib. Banyak terima kasih jobligado.
Erdogan CEVHER
19

Saya mendapatkan kesalahan ini di R Studio, dan hanya diperbaiki dengan membuat sidebar lebih besar dengan mengklik dan menyeret tepinya dari kanan ke kiri.

Janac Meena
sumber
2
inilah pemenangnya. Mengapa ini bahkan sesuatu?
colin
2
Tidak ada solusi lain yang berhasil untuk saya kecuali yang ini.
zsad512
1
Tidak tahu bagaimana atau mengapa, tapi ini juga satu-satunya solusi yang berhasil untuk saya.
TheSciGuy
10

Periksa apakah objek Anda adalah daftar atau vektor. Untuk melakukan ini, ketik is.list(yourobject). Jika ini benar, coba ganti namanya x<-unlist(yourobject). Ini akan membuatnya menjadi vektor yang bisa Anda plot.

Gina-Maria
sumber
Ini melakukannya untuk saya (menggunakan png()/ dev.off()di Rstudio).
knowah
5

masukkan deskripsi gambar di sini

Perbesar area ini jika Anda menggunakan RStudio.

vkalit.dll
sumber
3

Saya menemukan kesalahan ini hari ini. Awalnya, saya mencoba menampilkannya ke .jpegfile dengan lebar dan tinggi rendah.

jpeg("method1_test.jpg", width=900, height=900, res=40)

Kemudian saya meningkatkan lebar dan tinggi menjadi:

jpeg("method1_test.jpg", width=1900, height=1900, res=40)

Kesalahannya tidak ada. :)

Anda juga bisa bermain dengan resolusi, jika resolusinya tinggi, Anda membutuhkan lebih banyak lebar dan tinggi.

jaikamal
sumber
2

Saya berjuang dengan kesalahan ini selama berminggu-minggu (menggunakan RStudio). Saya mencoba memindahkan jendela plot lebih besar dan lebih kecil, tetapi itu tidak selalu membantu. Ketika saya memindahkan (menyeret) aplikasi ke monitor saya yang lebih besar, masalahnya hilang! Saya tercengang ... begitu banyak jam terbuang ... Saya tahu kode saya benar ...

Liz
sumber
0

Kanvas RStudio Plots membatasi lebar dan tinggi plot. Namun jika Anda membuat plot Anda dari potongan kode Rmarkdown , itu bekerja tanpa batasan bidang kanvas karena area plot diatur sesuai dengan ukuran kertas.

Misalnya:

    ```{r}
#inside of code chunk in Rmarkdown
        grid <- par(mfrow=c(4, 5))
        plot(faithful, main="Faithful eruptions")
        plot(large.islands, main="Islands", ylab="Area")
        ...
        par(grid)
    ```
Suat Atan PhD
sumber
0

Saya menemukan kesalahan yang sama hari ini. Saya telah mencoba tombol "Hapus semua Plot", tetapi tombol itu memberi saya kesalahan yang sama. Kemudian trik ini berhasil untuk saya, Coba tingkatkan area plot dengan menyeret. Ini pasti akan membantu Anda.

Dhruv Panchal
sumber
0

Saya baru saja menggunakan Hapus semua plot sekali lagi memberikan perintah plot dan itu sangat membantu

Nirmal Kumar
sumber
1
Selamat datang di SO. Tolong dapatkah Anda menjelaskan mengapa ini adalah jawabannya.
Mike Poole
0

Jika margin rendah, maka lebih baik memulai dengan perangkat plotting baru:

dev.new()
# plot()
# save your plot
dev.off()

Anda tidak akan pernah mendapatkan kesalahan margin, kecuali Anda memplot sesuatu yang besar yang tidak dapat diakomodasi.

Neeraj
sumber