-
Notifications
You must be signed in to change notification settings - Fork 13
/
line_plot.rb
65 lines (49 loc) · 1.87 KB
/
line_plot.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
module MotionPlot
class Line < Base
attr_accessor :curve_inerpolation
def add_series
@series.keys.each_with_index do |name, index|
line = CPTScatterPlot.alloc.initWithFrame(CGRectNull)
line.identifier = name
line_style = line.dataLineStyle.mutableCopy
line_style.lineWidth = @series[name].width
line_style.lineColor = @series[name].color
line.dataLineStyle = line_style
line.dataSource = self
line.delegate = self
line.interpolation = CPTScatterPlotInterpolationCurved if(@curve_inerpolation)
add_plot_symbol(line, index) if(@plot_symbol)
@graph.addPlot(line)
@plots << line
end
end
# This implementation of this method will put the line graph in a fix position so it won't be scrollable.
def plotSpace(space, willChangePlotRangeTo:new_range, forCoordinate:coordinate)
(coordinate == CPTCoordinateY) ? space.yRange : space.xRange
end
def scatterPlot(plot, plotSymbolWasSelectedAtRecordIndex:index)
if(@data_label and @data_label.annotation)
@graph.plotAreaFrame.plotArea.removeAnnotation(@data_label.annotation)
@data_label.annotation = nil
end
y_value = @series[plot.identifier].data[index].round(2)
@graph.plotAreaFrame.plotArea.addAnnotation(@data_label.annotation_for(y_value, atCoordinate: [index, y_value], plotSpace: @graph.defaultPlotSpace))
end
def numberOfRecordsForPlot(plot)
@series[plot.identifier].data.size
end
def numberForPlot(plot, field:field_enum, recordIndex:index)
data = @series[plot.identifier].data
(field_enum == CPTScatterPlotFieldY) ? data[index] : index
end
protected
def default_style
{
width: 2.0
}
end
def plot_type
"line"
end
end
end