2013-09-30 18 views
15

Làm cách nào để tạo biểu đồ thông tin cụ thể? Tôi có một mảng dữ liệu, ví dụ:Tạo biểu đồ trong Ruby

data = [0,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,7,8,9,9,10] 

Tôi muốn tạo ra một biểu đồ dựa trên bao nhiêu mục có cho 0, 1, 2, và vân vân. Có cách nào dễ dàng để làm điều đó trong Ruby?

Đầu ra phải ở dạng thùng và tần số dưới dạng mảng.

+1

định dạng đầu ra bạn là gì muốn? – sawa

+0

Khi bạn đặt câu hỏi, yêu cầu mã, bạn cần hiển thị nghiên cứu của mình và mọi nỗ lực bạn đã thực hiện để giải quyết vấn đề, cùng với lời giải thích của bạn tại sao chúng không hoạt động. –

Trả lời

8

Sử dụng đá quý này - http://rubygems.org/gems/histogram

data = [0,1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,7,8,9,9,10] 
(bins, freqs) = data.histogram 

này sẽ tạo ra một mảng bins chứa các thùng của biểu đồ và các mảng freqs chứa các tần số. Đá quý cũng hỗ trợ các hành vi binning khác nhau và trọng lượng/phân số.

Hy vọng điều này sẽ hữu ích.

39

Ruby Mảng thừa hưởng group_by from Enumerable, mà thực hiện điều này độc đáo:

Hash[*data.group_by{ |v| v }.flat_map{ |k, v| [k, v.size] }] 

nào trả về:

{ 
    0 => 1, 
    1 => 1, 
    2 => 5, 
    3 => 6, 
    4 => 4, 
    5 => 2, 
    6 => 3, 
    7 => 5, 
    8 => 1, 
    9 => 2, 
    10 => 1 
} 

Đó chỉ là một đẹp 'n sạch băm. Nếu bạn muốn một mảng của mỗi bin và tần số cặp bạn có thể rút ngắn nó và sử dụng:

data = [0,1,2,2,3,3,3,4] 
data.group_by{ |v| v }.map{ |k, v| [k, v.size] } 
# => [[0, 1], [1, 1], [2, 2], [3, 3], [4, 1]] 

Đây là những gì mã và group_by đang làm với các tập dữ liệu nhỏ hơn:

data.group_by{ |v| v }  
# => {0=>[0], 1=>[1], 2=>[2, 2], 3=>[3, 3, 3], 4=>[4]} 

data.group_by{ |v| v }.flat_map{ |k, v| [k, v.size] } 
# => [0, 1, 1, 1, 2, 2, 3, 3, 4, 1] 
Các vấn đề liên quan