2016-03-19 24 views
1

dotplot()'u ´lattice'den kullanmaya çalışıyorum; kategoriler yalnızca alt kümeler için mevcut olan bir veri kümesini çiziyorum ve gereksiz dikey boşluklardan kaçınmak için scales = list(y = list(relation = "free")) numaralı telefonu arıyorum. Ancak, bunu yapmak, öğeler arasındaki dikey boşluğu kesmek gibi görünüyor. Daha fazla, kategorilerin örtüşüp örtüşmediği ile ilgili gibi görünmektedir, çünkü sadece o zaman hata oluşur.Y değerleri arasındaki kafes nokta plotunda tutarsız boşluk

library(lattice) 

variables <- c(rep("Age", 4), rep("Sex", 2), rep("Children", 3)) 
levels <- c(1, 5, 100, 101, "Females", "Males", 2, 3, 90) 
values <- rnorm(9)  

dotplot(levels ~ values | variables, layout = c(1,3), 
     scales = list(y = list(relation = "free"))) 

Imgur

Sen Kadın ve Erkeklerde ile hiçbir sorun olup oysa örneğin 90 ve 3 için arasındaki aralık, kapalı olduklarını açıkça görebilirsiniz. Şimdi sayısal değerlere sahip olan kategorileri üst üste getirmeyecek şekilde değiştirirsem, doğru boşluk alırım.

levels <- c(1:4, "Females", "Males", 5:7) 

dotplot(levels ~ values | variables, layout = c(1,3), 
     scales = list(y = list(relation = "free"))) 

Imgur

herkes ne olup bittiğini ve bunu düzeltmek için neler yapabileceğinizi biliyor mu?

cevap

2

Bir işlevi lattice (bkz. dotplot, dropping unused levels of 'y') yazarı tarafından kullanabilirsiniz. .

"Size relation="free"/"sliced" kullanabilirsiniz Temelde biraz sorunlu ama y olarak as.numeric(y) olur Yani, her panelde küçük bir alt kümesi her zaman eğer daha fazla veya daha az bitişik davranır. Bu görevinden Deepayan Sarkar aktaran

(birbirine yakın olmanın seviyeleri açısından) o zaman iyi olurdu. Aksi takdirde. bu durumda, yine kendi prepanel ve panel fonksiyonlar yazabilir olmaz"

dotplot(levels ~ values | variables, layout = c(1,3), 
     scales = list(y = list(relation = "free")), 
     prepanel = function(x, y, ...) { 
      yy <- y[, drop = TRUE] 
      list(ylim = levels(yy), 
       yat = sort(unique(as.numeric(yy)))) 
     }, 
     panel = function(x, y, ...) { 
      yy <- y[, drop = TRUE] 
      panel.dotplot(x, yy, ...) 
     }) 

enter image description here