2014-10-02 18 views
5

Chúng tôi đang sử dụng chấm điểm trong thiết lập lớp học để giới thiệu biểu đồ, vì khái niệm binning là khó hiểu đối với nhiều sinh viên. Vì vậy, chúng ta bắt đầu với dotplot mà là tương tự nhưng trực quan hơn:Làm cho trục y tỷ lệ dotplot như đối với biểu đồ

x <- rnorm(100) 
qplot(x, geom = "bar") 
qplot(x, geom = "dotplot", method="histodot") 

dotplot

Bởi vì sinh viên làm điều này trên dữ liệu riêng của họ, mã cần phải làm việc mà không không quan trọng bằng tay. Tuy nhiên, geom_dotplot dường như sử dụng các giá trị mặc định chia tỷ lệ khác nhau hơn geom_bar. Trục y không điều chỉnh với dữ liệu, nhưng dường như chỉ phụ thuộc vào kích thước của các dấu chấm. Ví dụ:

x <- runif(1000) 
qplot(x, geom = "bar") 
qplot(x, geom = "dotplot", method="histodot") 

dotplot2

Làm thế nào tôi có thể làm cho geom_dotplot với stat_histodot quy mô trục y chính xác vì nó sẽ làm cho biểu đồ, hoặc bằng cách sử dụng nhỏ hơn hoặc chồng chéo chấm?

+1

Từ helpfile: "Khi binning dọc theo trục x và xếp chồng dọc theo trục y, các số trên trục y không có ý nghĩa, do giới hạn kỹ thuật của ggplot2. Bạn có thể ẩn trục y, như trong một trong các ví dụ hoặc chia tỷ lệ theo cách thủ công để khớp với số lượng dấu chấm. "- có vẻ như bạn có thể phải viết sau tất cả – CMichael

Trả lời

3

tôi đã đưa ra những cách giải quyết sau đó co lại các binwidth cho đến khi mọi thứ phù hợp trên trang:

# This function calculates a default binwidth that will work better 
# for the dotplot with large n than the ggplot2 default. 
calculate_smart_binwidth <- function(x, aspect_ratio = 2/3){ 
    x <- as.numeric(x) 
    nbins <- max(30, round(sqrt(length(x))/aspect_ratio)) 
    range <- range(x, na.rm = TRUE, finite = TRUE) 
    if(diff(range) == 0) return(NULL) 
    repeat { 
    message("trying nbins: ", nbins) 
    binwidth <- diff(range)/nbins; 
    highest_bin <- max(ggplot2:::bin(x, binwidth = binwidth)$count); 
    if(highest_bin < aspect_ratio * nbins) return(binwidth) 
    nbins <- ceiling(nbins * 1.03); 
    } 
} 

Ví dụ:

x <- runif(1e4) 
qplot(x, geom="dotplot", binwidth=calculate_smart_binwidth(x)) 

plot1

x <- rnorm(1e4) 
qplot(x, geom="dotplot", binwidth=calculate_smart_binwidth(x)) 

plot2

+0

. Ggplot2 ::: bin không hoạt động nữa với phiên bản ggplot 2.1.0 –

Các vấn đề liên quan