summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorJoe Kain <[email protected]>2012-03-16 20:29:35 -0700
committerJoe Kain <[email protected]>2012-03-22 21:55:47 -0700
commit8a0f840313df5ab5543b491d475650b1b63b558e (patch)
tree7bcace32256656a13afe8649bcf02a97bb66747b /lib
parent7881ee37e08d7768f8ba7c9270f2f07ea8b78cd0 (diff)
downloadcaxlsx-8a0f840313df5ab5543b491d475650b1b63b558e.tar.gz
caxlsx-8a0f840313df5ab5543b491d475650b1b63b558e.zip
Add Scatter charts
Diffstat (limited to 'lib')
-rw-r--r--lib/axlsx/drawing/drawing.rb3
-rw-r--r--lib/axlsx/drawing/named_axis_data.rb31
-rw-r--r--lib/axlsx/drawing/scatter_chart.rb50
-rw-r--r--lib/axlsx/drawing/scatter_series.rb31
4 files changed, 115 insertions, 0 deletions
diff --git a/lib/axlsx/drawing/drawing.rb b/lib/axlsx/drawing/drawing.rb
index b9a31150..93068a23 100644
--- a/lib/axlsx/drawing/drawing.rb
+++ b/lib/axlsx/drawing/drawing.rb
@@ -6,6 +6,7 @@ module Axlsx
require 'axlsx/drawing/pie_series.rb'
require 'axlsx/drawing/bar_series.rb'
require 'axlsx/drawing/line_series.rb'
+ require 'axlsx/drawing/scatter_series.rb'
require 'axlsx/drawing/scaling.rb'
require 'axlsx/drawing/axis.rb'
@@ -15,6 +16,7 @@ module Axlsx
require 'axlsx/drawing/cat_axis_data.rb'
require 'axlsx/drawing/val_axis_data.rb'
+ require 'axlsx/drawing/named_axis_data.rb'
require 'axlsx/drawing/marker.rb'
@@ -27,6 +29,7 @@ module Axlsx
require 'axlsx/drawing/pie_3D_chart.rb'
require 'axlsx/drawing/bar_3D_chart.rb'
require 'axlsx/drawing/line_3D_chart.rb'
+ require 'axlsx/drawing/scatter_chart.rb'
require 'axlsx/drawing/picture_locking.rb'
require 'axlsx/drawing/pic.rb'
diff --git a/lib/axlsx/drawing/named_axis_data.rb b/lib/axlsx/drawing/named_axis_data.rb
new file mode 100644
index 00000000..b249196f
--- /dev/null
+++ b/lib/axlsx/drawing/named_axis_data.rb
@@ -0,0 +1,31 @@
+# encoding: UTF-8
+module Axlsx
+ # The ValAxisData class manages the values for a chart value series.
+ class NamedAxisData < CatAxisData
+
+ def initialize(name, data=[])
+ super(data)
+ @name = name
+ end
+
+ # Serializes the value axis data
+ # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
+ # @return [String]
+ def to_xml(xml)
+ xml.send(@name) {
+ xml.numRef {
+ xml.f Axlsx::cell_range(@list)
+ xml.numCache {
+ xml.formatCode 'General'
+ xml.ptCount :val=>size
+ each_with_index do |item, index|
+ v = item.is_a?(Cell) ? item.value : item
+ xml.pt(:idx=>index) { xml.v v }
+ end
+ }
+ }
+ }
+ end
+ end
+
+end
diff --git a/lib/axlsx/drawing/scatter_chart.rb b/lib/axlsx/drawing/scatter_chart.rb
new file mode 100644
index 00000000..f257303a
--- /dev/null
+++ b/lib/axlsx/drawing/scatter_chart.rb
@@ -0,0 +1,50 @@
+# encoding: UTF-8
+module Axlsx
+ class ScatterChart < Chart
+ attr_reader :scatterStyle
+
+ # the x value axis
+ # @return [ValAxis]
+ attr_reader :xValAxis
+
+ # the y value axis
+ # @return [ValAxis]
+ attr_reader :yValAxis
+
+ def initialize(frame, options={})
+ @scatterStyle = :lineMarker
+ @xValAxId = rand(8 ** 8)
+ @yValAxId = rand(8 ** 8)
+ @xValAxis = ValAxis.new(@xValAxId, @yValAxId)
+ @yValAxis = ValAxis.new(@yValAxId, @xValAxId)
+ super(frame, options)
+ @series_type = ScatterSeries
+ end
+
+ # Serializes the bar chart
+ # @return [String]
+ def to_xml
+ super() do |xml|
+ xml.scatterChart {
+ xml.scatterStyle :val=>scatterStyle
+
+ # This is all repeated from line_3D_chart.rb!
+ xml.varyColors :val=>1
+ @series.each { |ser| ser.to_xml(xml) }
+ xml.dLbls {
+ xml.showLegendKey :val=>0
+ xml.showVal :val=>0
+ xml.showCatName :val=>0
+ xml.showSerName :val=>0
+ xml.showPercent :val=>0
+ xml.showBubbleSize :val=>0
+ }
+ xml.axId :val=>@xValAxId
+ xml.axId :val=>@yValAxId
+ }
+ @xValAxis.to_xml(xml)
+ @yValAxis.to_xml(xml)
+ end
+ end
+ end
+end
diff --git a/lib/axlsx/drawing/scatter_series.rb b/lib/axlsx/drawing/scatter_series.rb
new file mode 100644
index 00000000..52145cd1
--- /dev/null
+++ b/lib/axlsx/drawing/scatter_series.rb
@@ -0,0 +1,31 @@
+# encoding: UTF-8
+module Axlsx
+ class ScatterSeries < Series
+ # The x data for this series.
+ # @return [NamedAxisData]
+ attr_reader :xData
+
+ # The y data for this series.
+ # @return [NamedAxisData]
+ attr_reader :yData
+
+ def initialize(chart, options={})
+ @xData, @yData = nil
+ super(chart, options)
+
+ @xData = NamedAxisData.new("xVal", options[:xData]) unless options[:xData].nil?
+ @yData = NamedAxisData.new("yVal", options[:yData]) unless options[:yData].nil?
+ end
+
+ # Serializes the series
+ # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
+ # @return [String]
+ def to_xml(xml)
+ super(xml) do |xml_inner|
+ @xData.to_xml(xml_inner) unless @xData.nil?
+ @yData.to_xml(xml_inner) unless @yData.nil?
+ end
+ end
+
+ end
+end