2011-10-12 59 views
29

Tôi biết cách vẽ biểu đồ hoặc các bảng liên quan đến tần số/phần trăm khác. Nhưng bây giờ tôi muốn biết, làm thế nào tôi có thể nhận được những giá trị tần số trong một bảng để sử dụng sau khi thực tế.Nhận các giá trị tần số từ biểu đồ trong R

Tôi có một tập dữ liệu khổng lồ, giờ tôi vẽ một biểu đồ với một băng thông đã đặt. Tôi muốn trích xuất giá trị tần số (nghĩa là giá trị trên trục y) tương ứng với mỗi băng thông và lưu nó ở đâu đó.

Ai đó có thể giúp tôi với điều này không? Cảm ơn bạn!

Trả lời

18

Từ ?hist: Value

một đối tượng của lớp "biểu đồ" mà là một danh sách với các thành phần:

  • phá vỡ ranh giới n + 1 tế bào (= phá vỡ nếu đó là một vector). Đây là những dấu ngắt danh nghĩa, không phải với dấu giới hạn.
  • đếm n số nguyên; cho mỗi ô, số lượng x [] bên trong.
  • giá trị mật độ f^(x [i]), làm giá trị mật độ ước tính. Nếu tất cả (diff (ngắt) == 1), chúng là số lượng tần số tương đối/n và nói chung thỏa mãn tổng [i; f^(x [i]) (b [i + 1] -b [i])] = 1, trong đó b [i] = ngắt [i].
  • cường độ tương tự như mật độ. Không được chấp nhận, nhưng vẫn được giữ lại cho khả năng tương thích .
  • giữa các ô trung điểm n.
  • xname một chuỗi ký tự có tên đối số x thực tế.
  • giá trị logic hợp lý, cho biết khoảng cách giữa các ngắt có là giống nhau hay không.

breaksdensity cung cấp chỉ là về tất cả các bạn cần:

histrv<-hist(x) 
histrv$breaks 
histrv$density 
36

Chức năng hist có giá trị trả về (một đối tượng của lớp histogram):

R> res <- hist(rnorm(100)) 
R> res 
$breaks 
[1] -4 -3 -2 -1 0 1 2 3 4 

$counts 
[1] 1 2 17 27 34 16 2 1 

$intensities 
[1] 0.01 0.02 0.17 0.27 0.34 0.16 0.02 0.01 

$density 
[1] 0.01 0.02 0.17 0.27 0.34 0.16 0.02 0.01 

$mids 
[1] -3.5 -2.5 -1.5 -0.5 0.5 1.5 2.5 3.5 

$xname 
[1] "rnorm(100)" 

$equidist 
[1] TRUE 

attr(,"class") 
[1] "histogram" 
+0

Aaaah, chỉ có ý tưởng tương tự và muốn đăng bài này! Bạn đã nhanh hơn :-) – TMS

+6

Bạn cũng nên lưu ý rằng anh ta nên sử dụng 'plot = FALSE', để anh ta chỉ nhận được kết quả mà không cần vẽ biểu đồ. – TMS

+0

có cách nào không có lịch sử không? Tôi đang cố gắng tạo lịch sử với các ngắt tùy chỉnh và nó không hoạt động. Có thể có cái gì khác? – xealits

2

Chỉ trong trường hợp có ai đánh câu hỏi này với ggplot 's geom_histogram trong tâm trí, lưu ý rằng có một cách để trích xuất dữ liệu từ một đối tượng ggplot.

Chức năng thuận tiện sau kết quả đầu ra một dataframe với giới hạn dưới của mỗi bin (xmin), giới hạn trên của mỗi bin (xmax), điểm giữa của mỗi bin (x), cũng như các giá trị tần số (y).

## Convenience function 
get_hist <- function(p) { 
    d <- ggplot_build(p)$data[[1]] 
    data.frame(x = d$x, xmin = d$xmin, xmax = d$xmax, y = d$y) 
} 

# make a dataframe for ggplot 
set.seed(1) 
x = runif(100, 0, 10) 
y = cumsum(x) 
df <- data.frame(x = sort(x), y = y) 

# make geom_histogram 
p <- ggplot(data = df, aes(x = x)) + 
    geom_histogram(aes(y = cumsum(..count..)), binwidth = 1, boundary = 0, 
       color = "black", fill = "white") 

Minh họa:

hist = get_hist(p) 
head(hist$x) 
## [1] 0.5 1.5 2.5 3.5 4.5 5.5 
head(hist$y) 
## [1] 7 13 24 38 52 57 
head(hist$xmax) 
## [1] 1 2 3 4 5 6 
head(hist$xmin) 
## [1] 0 1 2 3 4 5 

Một câu hỏi có liên quan tôi đã trả lời ở đây (Cumulative histogram with ggplot2).

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