@@ -14,15 +14,17 @@ class BoxPlot < Artist::Plot::Base
1414 attr_accessor :outlier_marker_type
1515 attr_accessor :outlier_marker_color
1616 attr_accessor :outlier_marker_size
17-
17+ attr_accessor :median_width
18+
1819 def initialize ( *)
1920 super
2021 @whiskers = 1.5
2122 @x_left_box = [ ]
22- @median_color = :yellow
23+ @median_color = :black
2324 @outlier_marker_type = :plus
2425 @outlier_marker_color = nil
2526 @outlier_marker_size = 1.0
27+ @median_width = 3.0
2628 end
2729
2830 def process_data
@@ -37,15 +39,21 @@ def process_data
3739 end
3840
3941 def data vectors
40- @vectors = vectors
42+ # @vectors = vectors.to_a unless vectors.is_a? Array
43+ if vectors . is_a? Array
44+ vectors . each_with_index { |_ , idx | vectors [ idx ] = vectors [ idx ] . to_a }
45+ @vectors = vectors
46+ else
47+ @vectors = vectors . to_a
48+ end
4149 end
4250
4351 def draw
4452 @x_left_box . each_with_index do |x_left , i |
4553 draw_box x_left , i
4654 draw_whiskers x_left , i
4755 draw_outliers x_left , i
48- draw_median x_left , i
56+ draw_median x_left , i
4957 end
5058 end
5159
@@ -111,7 +119,7 @@ def draw_outliers x_left, index
111119
112120 def first_max_outlier_index vector , max
113121 return nil if vector . last >= max
114- vector . size . times do |i |
122+ vector . size . times do |i |
115123 if vector [ i ] > max
116124 return i
117125 end
@@ -131,7 +139,8 @@ def draw_median x_left, index
131139 Rubyplot ::Artist ::Line2D . new ( self ,
132140 x : [ x_left , x_left + @box_width ] ,
133141 y : [ @medians [ index ] , @medians [ index ] ] ,
134- color : @median_color
142+ color : @median_color ,
143+ width : @median_width
135144 ) . draw
136145 end
137146
@@ -141,7 +150,7 @@ def calculate_ranges!
141150 @medians = [ ]
142151 @mins = [ ]
143152 @maxs = [ ]
144-
153+
145154 @vectors . each do |sorted_vec |
146155 m = get_percentile 50 , sorted_vec
147156 q1 = get_percentile 25 , sorted_vec
0 commit comments