# encoding: UTF-8
module Axlsx
# A ScatterSeries defines the x and y position of data in the chart
# @note The recommended way to manage series is to use Chart#add_series
# @see Worksheet#add_chart
# @see Chart#add_series
# @see examples/example.rb
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
# The fill color for this series.
# Red, green, and blue is expressed as sequence of hex digits, RRGGBB. A perceptual gamma of 2.2 is used.
# @return [String]
attr_reader :color
# @return [String]
attr_reader :ln_width
# Line smoothing between data points
# @return [Boolean]
attr_reader :smooth
# Line markers presence
# @return [Boolean]
attr_reader :show_marker
# custom marker symbol
# @return [String]
attr_reader :marker_symbol
# Creates a new ScatterSeries
def initialize(chart, options={})
@xData, @yData = nil
if options[:smooth].nil?
# If caller hasn't specified smoothing or not, turn smoothing on or off based on scatter style
@smooth = [:smooth, :smoothMarker].include?(chart.scatter_style)
else
# Set smoothing according to the option provided
Axlsx::validate_boolean(options[:smooth])
@smooth = options[:smooth]
end
@ln_width = options[:ln_width] unless options[:ln_width].nil?
@show_marker = [:lineMarker, :marker, :smoothMarker].include?(chart.scatter_style)
@marker_symbol = :default
super(chart, options)
@xData = AxDataSource.new(:tag_name => :xVal, :data => options[:xData]) unless options[:xData].nil?
@yData = NumDataSource.new({:tag_name => :yVal, :data => options[:yData]}) unless options[:yData].nil?
end
# @see color
def color=(v)
@color = v
end
# @see smooth
def smooth=(v)
Axlsx::validate_boolean(v)
@smooth = v
end
# @see ln_width
def ln_width=(v)
@ln_width = v
end
# @see marker_symbol
def marker_symbol=(v)
Axlsx::validate_marker_symbol(v)
@marker_symbol = v
end
# Serializes the object
# @param [String] str
# @return [String]
def to_xml_string(str = '')
super(str) do
# needs to override the super color here to push in ln/and something else!
if color
str << ''
str << ('')
str << ''
str << ''
str << ('')
str << ''
str << ''
str << ''
str << ('')
str << ''
str << ''
str << ('')
str << ''
str << marker_symbol_xml
str << ''
else
str << "#{marker_symbol_xml}"
end
if ln_width
str << ''
str << ''
str << ''
end
@xData.to_xml_string(str) unless @xData.nil?
@yData.to_xml_string(str) unless @yData.nil?
str << ('')
end
str
end
private
def marker_symbol_xml
if !@show_marker
''
elsif @marker_symbol != :default
''
end.to_s
end
end
end