Class: Axlsx::Chart

Inherits:
Object
  • Object
show all
Defined in:
lib/axlsx/drawing/chart.rb

Overview

Note:

Worksheet#add_chart is the recommended way to create charts for your worksheets.

A Chart is the superclass for specific charts

See Also:

  • for examples

Direct Known Subclasses

Bar3DChart, Line3DChart, Pie3DChart, ScatterChart

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(frame, options = {}) {|_self| ... } ⇒ Chart

Creates a new chart object

Parameters:

  • frame (GraphicalFrame)

    The frame that holds this chart.

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • title (Cell, String)
  • show_legend (Boolean)
  • start_at (Array|String|Cell)

    The X, Y coordinates defining the top left corner of the chart.

  • end_at (Array|String|Cell)

    The X, Y coordinates defining the bottom right corner of the chart.

Yields:

  • (_self)

Yield Parameters:

  • _self (Axlsx::Chart)

    the object that the method was called on



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/axlsx/drawing/chart.rb', line 46

def initialize(frame, options={})
  @style = 2
  @view3D = nil
  @graphic_frame=frame
  @graphic_frame.anchor.drawing.worksheet.workbook.charts << self
  @series = SimpleTypedList.new Series
  @show_legend = true
  @series_type = Series
  @title = Title.new
  options.each do |o|
    self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
  end
  start_at(*options[:start_at]) if options[:start_at]
  end_at(*options[:end_at]) if options[:end_at]
  yield self if block_given?
end

Instance Attribute Details

#graphic_frameGraphicFrame (readonly)

A reference to the graphic frame that owns this chart

Returns:



14
15
16
# File 'lib/axlsx/drawing/chart.rb', line 14

def graphic_frame
  @graphic_frame
end

#seriesSimpleTypedList (readonly)

A collection of series objects that are applied to the chart

Returns:

  • (SimpleTypedList)


18
19
20
# File 'lib/axlsx/drawing/chart.rb', line 18

def series
  @series
end

#series_typeSeries (readonly)

The type of series to use for this chart.

Returns:



22
23
24
# File 'lib/axlsx/drawing/chart.rb', line 22

def series_type
  @series_type
end

#show_legendBoolean

Show the legend in the chart

Returns:

  • (Boolean)


38
39
40
# File 'lib/axlsx/drawing/chart.rb', line 38

def show_legend
  @show_legend
end

#styleInteger

The style for the chart. see ECMA Part 1 §21.2.2.196

Returns:

  • (Integer)


34
35
36
# File 'lib/axlsx/drawing/chart.rb', line 34

def style
  @style
end

#titleTitle

The title object for the chart.

Returns:



29
30
31
# File 'lib/axlsx/drawing/chart.rb', line 29

def title
  @title
end

#view3DObject

The 3D view properties for the chart



10
11
12
# File 'lib/axlsx/drawing/chart.rb', line 10

def view3D
  @view3D
end

Instance Method Details

#add_series(options = {}) ⇒ Series

Adds a new series to the chart’s series collection.

Returns:

See Also:



113
114
115
116
# File 'lib/axlsx/drawing/chart.rb', line 113

def add_series(options={})
  @series_type.new(self, options)
  @series.last
end

#end_at(x = 10, y = 10) ⇒ Marker

This is a short cut method to set the end anchor position If you need finer granularity in positioning use graphic_frame.anchor.to.colOff / rowOff

Parameters:

  • x (Integer) (defaults to: 10)

    The column - default 10

  • y (Integer) (defaults to: 10)

    The row - default 10

Returns:



170
171
172
173
174
# File 'lib/axlsx/drawing/chart.rb', line 170

def end_at(x=10, y=10)
  x, y = *parse_coord_args(x, y)
  @graphic_frame.anchor.to.col = x
  @graphic_frame.anchor.to.row = y
end

#fromObject

Note:

This will be disconinued in version 2.0.0. please use the start_at method

backwards compatibility to allow chart.to and chart.from access to anchor markers



106
107
108
# File 'lib/axlsx/drawing/chart.rb', line 106

def from
  @graphic_frame.anchor.from
end

#indexInteger

The index of this chart in the workbooks charts collection

Returns:

  • (Integer)


65
66
67
# File 'lib/axlsx/drawing/chart.rb', line 65

def index
  @graphic_frame.anchor.drawing.worksheet.workbook.charts.index(self)
end

#pnString

The part name for this chart

Returns:

  • (String)


71
72
73
# File 'lib/axlsx/drawing/chart.rb', line 71

def pn
  "#{CHART_PN % (index+1)}"
end

#start_at(x = 0, y = 0) ⇒ Marker

This is a short cut method to set the start anchor position If you need finer granularity in positioning use graphic_frame.anchor.from.colOff / rowOff

Parameters:

  • x (Integer) (defaults to: 0)

    The column

  • y (Integer) (defaults to: 0)

    The row

Returns:



158
159
160
161
162
# File 'lib/axlsx/drawing/chart.rb', line 158

def start_at(x=0, y=0)
  x, y = *parse_coord_args(x, y)
  @graphic_frame.anchor.from.col = x
  @graphic_frame.anchor.from.row = y
end

#toObject

Note:

This will be disconinued in version 2.0.0. Please use the end_at method

backwards compatibility to allow chart.to and chart.from access to anchor markers



100
101
102
# File 'lib/axlsx/drawing/chart.rb', line 100

def to
  @graphic_frame.anchor.to
end

#to_xml_string(str = '') {|str| ... } ⇒ String

Serializes the object

Parameters:

  • str (String) (defaults to: '')

Yields:

  • (str)

Returns:

  • (String)


121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/axlsx/drawing/chart.rb', line 121

def to_xml_string(str = '')
  str << '<?xml version="1.0" encoding="UTF-8"?>'
  str << '<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '">'
  str << '<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>'
  str << '<c:style val="' << style.to_s << '"/>'
  str << '<c:chart>'
  @title.to_xml_string str
  # do these need the c: namespace as well???
  str << '<c:autoTitleDeleted val="0"/>'
  @view3D.to_xml_string(str) if @view3D
  str << '<c:floor><c:thickness val="0"/></c:floor>'
  str << '<c:sideWall><c:thickness val="0"/></c:sideWall>'
  str << '<c:backWall><c:thickness val="0"/></c:backWall>'
  str << '<c:plotArea>'
  str << '<c:layout/>'
  yield str if block_given?
  str << '</c:plotArea>'
  if @show_legend
    str << '<c:legend>'
    str << '<c:legendPos val="r"/>'
    str << '<c:layout/>'
    str << '<c:overlay val="0"/>'
    str << '</c:legend>'
  end
  str << '<c:plotVisOnly val="1"/>'
  str << '<c:dispBlanksAs val="zero"/>'
  str << '<c:showDLblsOverMax val="1"/>'
  str << '</c:chart>'
  str << '</c:chartSpace>'
end