diff options
| author | Joe Kain <[email protected]> | 2012-03-16 20:29:35 -0700 |
|---|---|---|
| committer | Joe Kain <[email protected]> | 2012-03-22 21:55:47 -0700 |
| commit | 8a0f840313df5ab5543b491d475650b1b63b558e (patch) | |
| tree | 7bcace32256656a13afe8649bcf02a97bb66747b /lib | |
| parent | 7881ee37e08d7768f8ba7c9270f2f07ea8b78cd0 (diff) | |
| download | caxlsx-8a0f840313df5ab5543b491d475650b1b63b558e.tar.gz caxlsx-8a0f840313df5ab5543b491d475650b1b63b558e.zip | |
Add Scatter charts
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/axlsx/drawing/drawing.rb | 3 | ||||
| -rw-r--r-- | lib/axlsx/drawing/named_axis_data.rb | 31 | ||||
| -rw-r--r-- | lib/axlsx/drawing/scatter_chart.rb | 50 | ||||
| -rw-r--r-- | lib/axlsx/drawing/scatter_series.rb | 31 |
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 |
