2013-07-06 32 views
18

tôi không thể tìm thấy tài liệu cho các dấu chấm đôi xung quanh mật độchấm đôi trong một ggplot

set.seed(1234) 
df <- data.frame(cond = factor(rep(c("A","B"), each=200)), rating = c(rnorm(200),rnorm(200, mean=.8))) 
print(head(df)) 
print(ggplot(df, aes(x=rating)) + 
    geom_histogram(aes(y=..density..),  # Histogram with density instead of count on y-axis 
        binwidth=.5, 
        colour="black", fill="white") + 
    geom_density(alpha=.2, fill="#FF6666") + 
    geom_vline(aes(xintercept=mean(rating, na.rm=T)), # Ignore NA values for mean 
       color="red", linetype="dashed", size=1)) 

Bạn có biết những gì nhà điều hành mà họ đại diện?

Sửa

Tôi biết những gì nó không khi được sử dụng trong một Geom, tôi muốn biết những gì nó . Ví dụ, dot điều hành duy nhất được định nghĩa là

> . 
function (..., .env = parent.frame()) 
{ 
    structure(as.list(match.call()[-1]), env = .env, class = "quoted") 
} 
<environment: namespace:plyr> 

Nếu tôi xác định lại mật độ, sau đó ..density .. có tác dụng khác nhau, vì vậy có vẻ như XX -> ..XX .. là Một nhà điều hành. Tôi muốn tìm cách nó được xác định.

+0

Xem tài liệu về stat_bin. – joran

+0

Đó là tín hiệu cho 'ggpolot2' để thực hiện tính toán nội bộ của riêng nó với giá trị thay vì tìm giá trị trong không gian làm việc. –

+0

vâng tôi thấy hiệu ứng. Tôi có thể thay thế bằng ..count .. để có được anh ta biểu đồ thường xuyên. nhưng tôi tự hỏi là ngôn ngữ xây dựng nó thực sự là gì. nếu tôi xác định lại mật độ của hàm ảnh hưởng đến bản vẽ, vì vậy hãy vui vẻ x -> ..x .. là một toán tử trên ví dụ – nicolas

Trả lời

22

Không giống như nhiều ngôn ngữ khác, trong R, dấu chấm hoàn toàn hợp lệ trong số nhận dạng. Trong trường hợp này, ..count.. là số nhận dạng. Tuy nhiên, có mã đặc biệt trong ggplot2 để phát hiện mẫu này và để cắt các chấm. Nó cảm thấy không chắc rằng mã thực sự sẽ sử dụng định danh được định dạng như vậy, và vì vậy đây là một cách gọn gàng để phân biệt giữa thẩm mỹ được xác định và tính toán.

Mã liên quan là vào cuối layer.r:

# Determine if aesthetic is calculated 
is_calculated_aes <- function(aesthetics) { 
    match <- "\\.\\.([a-zA-z._]+)\\.\\." 
    stats <- rep(FALSE, length(aesthetics)) 
    grepl(match, sapply(aesthetics, deparse)) 
} 

# Strip dots from expressions 
strip_dots <- function(aesthetics) { 
    match <- "\\.\\.([a-zA-z._]+)\\.\\." 
    strings <- lapply(aesthetics, deparse) 
    strings <- lapply(strings, gsub, pattern = match, replacement = "\\1") 
    lapply(strings, function(x) parse(text = x)[[1]]) 
} 

Nó được sử dụng thêm lên trên trong map_statistic chức năng. Nếu có tính thẩm mỹ được tính toán, một khung dữ liệu khác (có chứa cột count) được sử dụng cho cốt truyện.

Dấu chấm đơn . chỉ là một số nhận dạng khác, được xác định trong gói plyr. Như bạn có thể thấy, nó là một hàm.

+0

tuyệt vời. vì vậy đây là thuật sĩ dựa trên sự phản chiếu. tốt để biết như tôi tưởng tượng nó đại diện cho một mô hình toàn bộ trong một số libs R, và cung cấp một điểm nhập tài liệu trong ggplot. – nicolas

+0

@nicolas: Tôi không chắc liệu cụm từ "phản chiếu" có áp dụng ở đây hay không. 'ggplot2' chỉ xem xét dữ liệu và thực hiện hành động khác nếu dữ liệu được định dạng theo một cách nhất định. – krlmlr

+1

cũng ràng buộc không phải là tĩnh, và được tính toán trên bay, dựa trên một số thuộc tính.có thể nó không phải là sự phản chiếu, nhưng nó trông gần nó. – nicolas