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



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/axlsx/drawing/chart.rb', line 15

def initialize(frame, options={})
  @style = 18  
  @view_3D = 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:



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

def graphic_frame
  @graphic_frame
end

#seriesSimpleTypedList (readonly)

A collection of series objects that are applied to the chart

Returns:

  • (SimpleTypedList)


42
43
44
# File 'lib/axlsx/drawing/chart.rb', line 42

def series
  @series
end

#series_typeSeries (readonly)

The type of series to use for this chart.

Returns:



46
47
48
# File 'lib/axlsx/drawing/chart.rb', line 46

def series_type
  @series_type
end

#show_legendBoolean

Show the legend in the chart

Returns:

  • (Boolean)


62
63
64
# File 'lib/axlsx/drawing/chart.rb', line 62

def show_legend
  @show_legend
end

#styleInteger

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

Returns:

  • (Integer)


58
59
60
# File 'lib/axlsx/drawing/chart.rb', line 58

def style
  @style
end

#titleTitle

The title object for the chart.

Returns:



53
54
55
# File 'lib/axlsx/drawing/chart.rb', line 53

def title
  @title
end

#view_3DObject Also known as: view3D

The 3D view properties for the chart



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

def view_3D
  @view_3D
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:



175
176
177
178
179
# File 'lib/axlsx/drawing/chart.rb', line 175

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)


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

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

#pnString

The part name for this chart

Returns:

  • (String)


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

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:



163
164
165
166
167
# File 'lib/axlsx/drawing/chart.rb', line 163

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
151
152
153
154
155
# 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 << '" xmlns:r="' << XML_NS_R << '">'
  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="' << (@title == nil).to_s << '"/>'
  @view_3D.to_xml_string(str) if @view_3D
  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:printSettings>'
  str << '<c:headerFooter/>'
  str << '<c:pageMargins b="1.0" l="0.75" r="0.75" t="1.0" header="0.5" footer="0.5"/>'
  str << '<c:pageSetup/>'
  str << '</c:printSettings>'
  str << '</c:chartSpace>'
end