2014-08-30 20 views
5

R-3.1.1, Win7x64içinde xlim/İlim davranış şaşkın R

Merhaba, iki değişken 0 ile istediğim 100 X, 0 dan 70 e kadar çalışır ve Y çalışır şekilde ölçülür verileri Gözlemlerin basit bir dağılımını yapmak. saçılım (0-70 çalışan) x-ekseni .7 (0-100 aralığında çalışır) y-ekseninin büyüklüğünde olması gibi, boyutsuzlaştırılmış edilmelidir.

Aşağıdaki kodu kullanın ben şöyle bu grafiğini verir görmek şaşırttı

plot.new() 
plot(0, 0, asp = 1, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", type = "n") 

: Bunu bekliyordum nasıl enter image description here

İki şey değildir: 1) x ekseni ve y ekseni xlim ve ylim değerleri ile sınırlı DEĞİLDİR. (Neden bu?) Ve 2) rakam neredeyse kare.

Rakam kullanmadan önce, R penceresini veya Rstudio penceresini manuel olarak yeniden boyutlandırarak rakamı yeniden boyutlandırabilirim, ancak bu pek de uygun değildir, çünkü çoğu çizimde farklı xlim ve ylim boyutları ve Bu rakamların daha sonra önceden biçimlendirilmiş raporlara eklenmesi gerekir (bu nedenle bu kesin yerleşim taleplerini yerine getirmeleri gerekir). Ben de

dev.new(width = 7, height = 10) 

kullanarak denedi ancak ya da yardımcı olmadı.

Soruma ilişkin soru: 1) Bu şekle, işlevin geçirilen tam xlim ve ylim aralıklarıyla sınırlandırılmasına nasıl "zorlayabilirim?" kesin nispi boyutları olan bir şekil (y-ekseninin uzunluğu kadar geniştir .7 kez olmak x ekseni)

cevap

5

plot.window için yardım asp tartışılması sen plot için yardım bakarsak asp daha hakkında asp öğrenmek için plot.window yönlendirir, (xlim ve ylim ayarları geçersiz kılar ima):

asp sonra pencere asp x yönünde bir veri birimi eşit uzunlukta olacak şekilde ayarlanmış bir sonlu pozitif değer ise * y yönünde bir veri birimi. Bu durumda, par("usr") artık, örneğin, par("xaxs") değil, asp ve aygıtın en boy oranına göre, tarafından belirlenmektedir

not edin. (Etkileşimli Aşağıdaki örnek çalıştırdıktan sonra arsa cihazı yeniden boyutlandırmak ne olur bakın!)

özel bir durum asp == 1 nokta arasındaki mesafeler doğru ekranda gösterilir araziler üretir. asp > 1 ile Değerler enlem ve boylam kullanırken daha doğru haritalar üretmek için kullanılabilir.

@ mr.joshuagordon belirtildiği gibi plot den asp argüman kaldırılırken,, istediğiniz boy oranını elde etmek için pdf (veya png veya jpeg bitmap çıkış istiyorum) işlevi ve boyutlara sahip oynayabilir Böylece xlim ve ylim değerlerini ayarlayabilirsiniz.

Diğer bir seçenek, kolay eksen limitlerini ve ayrı ayrı boy oranını ayarlamak için yapar ggplot2 geçmek için:

library(ggplot2) 

# Some fake data 
dat = data.frame(x=c(2,30,50), y=c(10, 60, 90)) 

# 1 y-unit = 1 x-unit, so the plot area is not square 
ggplot(dat, aes(x,y)) + 
    geom_point() + 
    scale_x_continuous(limits=c(0,70)) + 
    scale_y_continuous(limits=c(0,100)) + 
    coord_fixed(ratio=1) 

# 1 y-unit = 0.7 * 1 x-unit, so the plot is square, but the physical distance 
# of each x-unit and y-unit are no longer the same 
ggplot(dat, aes(x,y)) + 
    geom_point() + 
    scale_x_continuous(limits=c(0,70)) + 
    scale_y_continuous(limits=c(0,100)) + 
    coord_fixed(ratio=70/100) 

Update: Burada baz, bağımsız bir şekilde xlim, ylim ve en-boy oranını kontrol etmek için nasıl grafikler: asp yerine, grafik alanının pin parametresini kullanarak çizim alanının fiziksel boyutlarını ayarlayın. Bu ayar xlim ve ylim nominal değerlerini etkilemez, ancak 1 x birim ve 1 y biriminin fiziksel mesafe ölçüsünü değiştirir.

Örnek 1: İşte bazı örnekler

# Create a 12" x 6" pdf graphics device 
pdf("test.pdf", width=12, height=6) 

# Divide graphics device into two regions, each of which will contain a plot 
par(mfrow=c(1,2)) 

# Left Panel: 5" x 5" plot area (plot region is square, so 1 y-unit = 
# 0.7 * 1 x-unit in terms of physical distance in the plot region) 
par(pin=c(5,5)) 
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", 
    type = "n",main='par(pin=c(5,5)') 

# Right Panel: 0.7*5" x 5" plot area (so 1 x-unit = 1 y-unit 
# in terms of physical distance in the plot region) 
par(pin=c(0.7*5,5)) 
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", 
    type = "n",main='par(pin=c(5,0.7*5)') 

dev.off() 

Örnek 2: Biz farklı boy oranına sahip bir PDF sayfasında, her iki panelleri oluşturacağız sen eğer bir hata alırsınız olduğunu gösterme Grafik aygıtının boyutundan daha büyük olması için pin'u ayarlayın. Varsayılan cihazı (benim durumumda RStudioGD) kullanacağız.

par(pin=c(10, 10)) 
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", 
    type = "n",main='par(pin=c(5,4)') 

# Get dimensions of the default plot device 
par("din") 

# Create a plot that takes up an area just a bit smaller than the device size 
par(pin=par("din")-0.2) 
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", 
    type = "n",main='par(pin=c(5,4)') 

# Create a plot that takes up an area just a bit larger than the device size 
# (we'll get an error this time) 
par(pin=par("din") + 0.01) 
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", 
    type = "n") 

> Error in plot.new() : plot region too large 

Örnek 3: aynı hata size (vb veya png) pdf cihazın boyutunu aşıyorsa oluşur:

çalışır
# Create a 5" x 5" pdf graphics device 
pdf("test.pdf", 5,5) 
# Create a plot that takes up a little bit less than the device size 
par(pin=c(5,5)-0.2) 
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", 
    type = "n") 
dev.off() 

# Create a plot that takes up a little bit more than the device size 
pdf("test.pdf", 5,5) 
par(pin=c(5,5)+0.01) 
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "", 
    type = "n") 
# Gives the following error: Error in plot.new() : plot region too large 
dev.off() 
+0

@ mr.joshuagordon'un yanıtına eklediğiniz için teşekkür ederiz. Bu neden işe yaramadığını açıklıyor, ancak hala xlim ve ylim'in asp tarafından geçersiz kılınmasının neden şaşırtıcı olduğunu düşünüyorum. Benim durumumda, asp ihtiyacım var (çünkü 1 x-adımı, verilerdeki sayaçları temsil ettiğinden tam olarak 1 y-adımına eşittir), ama ben de çalışıyorum veri aralığına arsayı sınırlamak istiyorum. ile. ggplot2 çözümü için teşekkürler, ggplot2 ... –

+0

öğrenmeye başlamak zorundayım gibi görünüyor ggplot2'yi öğrenmenizi tavsiye ederim. Bir süreliğine de kaçındım çünkü grafikler hakkında yeni bir düşünme şekli öğrenmek için çok fazla iş gibi görünüyordu. Ama o kadar uzun sürmedi ve nadiren temel grafikleri kullanıyorum. – eipi10

+0

Teşekkürler @ eipi10, son derece yardımcı oldunuz Cevabınızdaki güncellemeler ÇOK faydalıdır ve beni ggplot2'yi almam konusunda uyarıyorsunuz. Şimdiye kadar buna karşı koymamın bir nedeni, grafikleri temel grafiklerden çok daha yavaş göstermesidir. –

5

bir pdf olarak arsa kaydetmek ve belirtebilir oluşturmak için nasıl ve 2) onun boyutları şöyle:

pdf("SampleGraph.pdf",width=7,height=10) 
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), asp=NA, xlab = "", ylab = "", type = "n") # change asp to NA 
dev.off() # turn off plotting 
+0

, teşekkürler. Ayrı bir dosyaya yazmak zorunda kalmadan bunu yapmayı tercih ederim ama bu problemi etkin bir şekilde çözüyor, teşekkürler! –