#!/usr/bin/env ruby # -*- coding: utf-8 -*- ####################################################################### # # A demo of a Pareto chart in Excel::Writer::XLSX. # # reverse ('(c)'), March 2015, John McNamara, jmcnamara@cpan.org # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com # require 'write_xlsx' workbook = WriteXLSX.new('chart_pareto.xlsx') worksheet = workbook.add_worksheet # Formats used in the workbook. bold = workbook.add_format(bold: 1) percent_format = workbook.add_format(num_format: '0.0%') # Widen the columns for visibility. worksheet.set_column('A:A', 15) worksheet.set_column('B:C', 10) # Add the worksheet data that the charts will refer to. headings = %w[Reason Number Percentage] reasons = [ 'Traffic', 'Child care', 'Public Transport', 'Weather', 'Overslept', 'Emergency' ] numbers = [60, 40, 20, 15, 10, 5] percents = [0.44, 0.667, 0.8, 0.9, 0.967, 1] worksheet.write_row('A1', headings, bold) worksheet.write_col('A2', reasons) worksheet.write_col('B2', numbers) worksheet.write_col('C2', percents, percent_format) # Create a new column chart. This will be the primary chart. column_chart = workbook.add_chart(type: 'column', embedded: 1) # Add a series column_chart.add_series( categories: 'Sheet1!$A$2:$A$7', values: 'Sheet1!$B$2:$B$7' ) # Add a chart title. column_chart.set_title(name: 'Reasons for lateness') # Turn off the chart legend. column_chart.set_legend(position: 'none') # Set the title and scale of the Y axes. Note, the secondary axis is set from # the primary chart. column_chart.set_y_axis( name: 'Respondents (number)', min: 0, max: 120 ) column_chart.set_y2_axis(max: 1) # Create a new line chart. This will be the secondary chart. line_chart = workbook.add_chart(type: 'line', embedded: 1) # Add a series, on the secondary axis. line_chart.add_series( categories: '=Sheet1!$A$2:$A$7', values: '=Sheet1!$C$2:$C$7', marker: { type: 'automatic' }, y2_axis: 1 ) # Combine the charts. column_chart.combine(line_chart) # Insert the chart into the worksheet. worksheet.insert_chart('F2', column_chart) workbook.close