motion-plot 0.4.5 → 0.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +8 -5
- data/lib/motion-plot/chart/bar_plot.rb +2 -2
- data/lib/motion-plot/chart/delegates/bar_delegate.rb +1 -11
- data/lib/motion-plot/chart/delegates/base_delegate.rb +13 -0
- data/lib/motion-plot/chart/delegates/beizer_curve_delegate.rb +40 -0
- data/lib/motion-plot/chart/delegates/line_delegate.rb +26 -0
- data/lib/motion-plot/chart/delegates/percent_bar_delegate.rb +2 -6
- data/lib/motion-plot/chart/delegates/stack_bar_delegate.rb +2 -10
- data/lib/motion-plot/chart/line_plot.rb +9 -28
- data/lib/motion-plot/chart/pie_plot.rb +1 -0
- data/lib/motion-plot/utilities/legend.rb +1 -3
- data/lib/motion-plot/version.rb +1 -1
- metadata +5 -2
data/README.md
CHANGED
@@ -1,22 +1,25 @@
|
|
1
1
|
# Motion::Plot
|
2
2
|
|
3
|
-
Build native charts as you are used with Highcharts
|
3
|
+
Build native interactive charts using simple JSON as you are used with Highcharts.
|
4
|
+
This library is a wrapper on top of [CorePlot](https://code.google.com/p/core-plot/), the iOS plotting framework to build native chart using CoreAnimation, Core Data and Cocoa Bindings
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
7
|
-
Add this line to your application's Gemfile:
|
8
|
+
1. Add this line to your application's Gemfile:
|
8
9
|
|
9
10
|
`gem 'motion-plot'`
|
10
11
|
|
11
|
-
And then execute:
|
12
|
+
And then execute:
|
12
13
|
|
13
14
|
$ bundle
|
14
15
|
|
15
|
-
Or install it yourself as:
|
16
|
+
Or install it yourself as:
|
16
17
|
|
17
18
|
$ gem install motion-plot
|
18
19
|
|
19
|
-
And add `require 'motion-plot'` to your `Gemfile`
|
20
|
+
And add `require 'motion-plot'` to your `Gemfile`
|
21
|
+
|
22
|
+
2. Run 'pod setup' to install core-plot as pod on your local
|
20
23
|
|
21
24
|
## Usage
|
22
25
|
|
@@ -10,7 +10,7 @@ module MotionPlot
|
|
10
10
|
|
11
11
|
bar_x = CPDBarInitialX
|
12
12
|
@data_hash = {}
|
13
|
-
horizontal_bar = (@plot_options.bar[:orientation] == "vertical") ? true : false
|
13
|
+
horizontal_bar = (@plot_options and @plot_options.bar[:orientation] == "vertical") ? true : false
|
14
14
|
@delegate_object = case @stacking
|
15
15
|
when "normal"
|
16
16
|
StackBarDelegate.new(self)
|
@@ -48,7 +48,7 @@ module MotionPlot
|
|
48
48
|
|
49
49
|
def animate(bar)
|
50
50
|
bar.anchorPoint = [0.0, 0.0]
|
51
|
-
scale_direction = (@plot_options.bar[:orientation] == "vertical") ? "transform.scale.x" : "transform.scale.y"
|
51
|
+
scale_direction = (@plot_options and @plot_options.bar[:orientation] == "vertical") ? "transform.scale.x" : "transform.scale.y"
|
52
52
|
scaling = CABasicAnimation.animationWithKeyPath(scale_direction)
|
53
53
|
scaling.fromValue = 0.0
|
54
54
|
scaling.toValue = 1.0
|
@@ -1,15 +1,5 @@
|
|
1
1
|
module MotionPlot
|
2
|
-
class BarDelegate
|
3
|
-
|
4
|
-
# delegate :series, :to => :delegated_to
|
5
|
-
|
6
|
-
def initialize(source)
|
7
|
-
@delegated_to = source
|
8
|
-
end
|
9
|
-
|
10
|
-
def numberOfRecordsForPlot(plot)
|
11
|
-
@delegated_to.series[plot.identifier].data.size
|
12
|
-
end
|
2
|
+
class BarDelegate < BaseDelegate
|
13
3
|
|
14
4
|
def numberForPlot(plot, field:field_enum, recordIndex:index)
|
15
5
|
data = @delegated_to.series[plot.identifier].data
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module MotionPlot
|
2
|
+
class BeizerCurveDelegate < BaseDelegate
|
3
|
+
|
4
|
+
def numberOfRecordsForPlot(plot)
|
5
|
+
step_size = @delegated_to.plot_options.line[:step_size] || 1
|
6
|
+
p @delegated_to.plot_options.line[:data_size] / step_size
|
7
|
+
@delegated_to.plot_options.line[:data_size] / step_size
|
8
|
+
end
|
9
|
+
|
10
|
+
# This implementation of this method will put the line graph in a fix position so it won't be scrollable.
|
11
|
+
def plotSpace(space, willChangePlotRangeTo:new_range, forCoordinate:coordinate)
|
12
|
+
(coordinate == CPTCoordinateY) ? space.yRange : space.xRange
|
13
|
+
end
|
14
|
+
|
15
|
+
def scatterPlot(plot, plotSymbolWasSelectedAtRecordIndex:index)
|
16
|
+
if(@delegated_to.data_label and @delegated_to.data_label.annotation)
|
17
|
+
@delegated_to.graph.plotAreaFrame.plotArea.removeAnnotation(@delegated_to.data_label.annotation)
|
18
|
+
@delegated_to.data_label.annotation = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
y_value = @delegated_to.series[plot.identifier].data[index].round(2)
|
22
|
+
@delegated_to.graph.plotAreaFrame.plotArea.addAnnotation(@delegated_to.data_label.annotation_for(y_value, atCoordinate: [index, y_value], plotSpace: @delegated_to.graph.defaultPlotSpace))
|
23
|
+
end
|
24
|
+
|
25
|
+
def numberForPlot(plot, field:field_enum, recordIndex:index)
|
26
|
+
|
27
|
+
case field_enum
|
28
|
+
when CPTScatterPlotFieldY
|
29
|
+
num = index
|
30
|
+
when CPTScatterPlotFieldX
|
31
|
+
p @delegated_to.series[plot.identifier].data
|
32
|
+
|
33
|
+
num = @delegated_to.series[plot.identifier].data.call(index)
|
34
|
+
end
|
35
|
+
|
36
|
+
num
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module MotionPlot
|
2
|
+
class LineDelegate < BaseDelegate
|
3
|
+
|
4
|
+
# This implementation of this method will put the line graph in a fix position so it won't be scrollable.
|
5
|
+
def plotSpace(space, willChangePlotRangeTo:new_range, forCoordinate:coordinate)
|
6
|
+
(coordinate == CPTCoordinateY) ? space.yRange : space.xRange
|
7
|
+
end
|
8
|
+
|
9
|
+
def scatterPlot(plot, plotSymbolWasSelectedAtRecordIndex:index)
|
10
|
+
if(@delegated_to.data_label and @delegated_to.data_label.annotation)
|
11
|
+
@delegated_to.graph.plotAreaFrame.plotArea.removeAnnotation(@delegated_to.data_label.annotation)
|
12
|
+
@delegated_to.data_label.annotation = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
y_value = @delegated_to.series[plot.identifier].data[index].round(2)
|
16
|
+
@delegated_to.graph.plotAreaFrame.plotArea.addAnnotation(@delegated_to.data_label.annotation_for(y_value, atCoordinate: [index, y_value], plotSpace: @delegated_to.graph.defaultPlotSpace))
|
17
|
+
end
|
18
|
+
|
19
|
+
def numberForPlot(plot, field:field_enum, recordIndex:index)
|
20
|
+
data = @delegated_to.series[plot.identifier].data
|
21
|
+
|
22
|
+
(field_enum == CPTScatterPlotFieldY) ? data[index] : index
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -1,15 +1,11 @@
|
|
1
1
|
module MotionPlot
|
2
|
-
class PercentBarDelegate
|
2
|
+
class PercentBarDelegate < BaseDelegate
|
3
3
|
|
4
4
|
def initialize(source)
|
5
|
-
|
5
|
+
super
|
6
6
|
@number_of_plots = @delegated_to.series.keys.size
|
7
7
|
end
|
8
8
|
|
9
|
-
def numberOfRecordsForPlot(plot)
|
10
|
-
@delegated_to.series[plot.identifier].data.size
|
11
|
-
end
|
12
|
-
|
13
9
|
def numberForPlot(plot, field:field_enum, recordIndex:index)
|
14
10
|
case field_enum
|
15
11
|
when CPTBarPlotFieldBarLocation
|
@@ -1,16 +1,8 @@
|
|
1
1
|
module MotionPlot
|
2
|
-
class StackBarDelegate
|
2
|
+
class StackBarDelegate < BaseDelegate
|
3
3
|
|
4
4
|
# consign :series, :to => :delegated_to
|
5
|
-
|
6
|
-
def initialize(source)
|
7
|
-
@delegated_to = source
|
8
|
-
end
|
9
|
-
|
10
|
-
def numberOfRecordsForPlot(plot)
|
11
|
-
@delegated_to.series[plot.identifier].data.size
|
12
|
-
end
|
13
|
-
|
5
|
+
|
14
6
|
def numberForPlot(plot, field:field_enum, recordIndex:index)
|
15
7
|
case field_enum
|
16
8
|
when CPTBarPlotFieldBarLocation
|
@@ -2,6 +2,12 @@ module MotionPlot
|
|
2
2
|
class Line < Base
|
3
3
|
|
4
4
|
def add_series
|
5
|
+
@delegate_object = if(@plot_options and @plot_options.line[:beizer])
|
6
|
+
BeizerCurveDelegate.new(self)
|
7
|
+
else
|
8
|
+
LineDelegate.new(self)
|
9
|
+
end
|
10
|
+
|
5
11
|
@series.keys.each_with_index do |name, index|
|
6
12
|
line = CPTScatterPlot.alloc.initWithFrame(CGRectNull)
|
7
13
|
line.identifier = name
|
@@ -12,9 +18,9 @@ module MotionPlot
|
|
12
18
|
line_style.lineColor = @series[name].color
|
13
19
|
|
14
20
|
line.dataLineStyle = line_style
|
15
|
-
line.dataSource =
|
16
|
-
line.delegate =
|
17
|
-
line.interpolation = CPTScatterPlotInterpolationCurved if(@plot_options.line[:curve_inerpolation])
|
21
|
+
line.dataSource = @delegate_object
|
22
|
+
line.delegate = @delegate_object
|
23
|
+
line.interpolation = CPTScatterPlotInterpolationCurved if(@plot_options and @plot_options.line[:curve_inerpolation])
|
18
24
|
|
19
25
|
add_plot_symbol(line, @series[name].plot_symbol.symbol_for(line)) if(@series[name].plot_symbol)
|
20
26
|
|
@@ -23,31 +29,6 @@ module MotionPlot
|
|
23
29
|
end
|
24
30
|
end
|
25
31
|
|
26
|
-
# This implementation of this method will put the line graph in a fix position so it won't be scrollable.
|
27
|
-
def plotSpace(space, willChangePlotRangeTo:new_range, forCoordinate:coordinate)
|
28
|
-
(coordinate == CPTCoordinateY) ? space.yRange : space.xRange
|
29
|
-
end
|
30
|
-
|
31
|
-
def scatterPlot(plot, plotSymbolWasSelectedAtRecordIndex:index)
|
32
|
-
if(@data_label and @data_label.annotation)
|
33
|
-
@graph.plotAreaFrame.plotArea.removeAnnotation(@data_label.annotation)
|
34
|
-
@data_label.annotation = nil
|
35
|
-
end
|
36
|
-
|
37
|
-
y_value = @series[plot.identifier].data[index].round(2)
|
38
|
-
@graph.plotAreaFrame.plotArea.addAnnotation(@data_label.annotation_for(y_value, atCoordinate: [index, y_value], plotSpace: @graph.defaultPlotSpace))
|
39
|
-
end
|
40
|
-
|
41
|
-
def numberOfRecordsForPlot(plot)
|
42
|
-
@series[plot.identifier].data.size
|
43
|
-
end
|
44
|
-
|
45
|
-
def numberForPlot(plot, field:field_enum, recordIndex:index)
|
46
|
-
data = @series[plot.identifier].data
|
47
|
-
|
48
|
-
(field_enum == CPTScatterPlotFieldY) ? data[index] : index
|
49
|
-
end
|
50
|
-
|
51
32
|
protected
|
52
33
|
def default_style
|
53
34
|
{
|
data/lib/motion-plot/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-plot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bubble-wrap
|
@@ -81,6 +81,9 @@ files:
|
|
81
81
|
- lib/motion-plot/chart/bar_plot.rb
|
82
82
|
- lib/motion-plot/chart/base.rb
|
83
83
|
- lib/motion-plot/chart/delegates/bar_delegate.rb
|
84
|
+
- lib/motion-plot/chart/delegates/base_delegate.rb
|
85
|
+
- lib/motion-plot/chart/delegates/beizer_curve_delegate.rb
|
86
|
+
- lib/motion-plot/chart/delegates/line_delegate.rb
|
84
87
|
- lib/motion-plot/chart/delegates/percent_bar_delegate.rb
|
85
88
|
- lib/motion-plot/chart/delegates/stack_bar_delegate.rb
|
86
89
|
- lib/motion-plot/chart/line_plot.rb
|