File: chart_doughnut.pl

package info (click to toggle)
libexcel-writer-xlsx-perl 1.11-1
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 18,096 kB
  • sloc: perl: 22,147; makefile: 41
file content (132 lines) | stat: -rw-r--r-- 3,886 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/perl

#######################################################################
#
# A demo of a Doughnut chart in Excel::Writer::XLSX.
#
# The demo also shows how to set segment colours. It is possible to define
# chart colors for most types of Excel::Writer::XLSX charts via the
# add_series() method. However, Pie and Doughtnut charts are a special case
# since each segment is represented as a point so it is necessary to assign
# formatting to each point in the series.
#
# Copyright 2000-2023, John McNamara, jmcnamara@cpan.org
#

use strict;
use warnings;
use Excel::Writer::XLSX;

my $workbook  = Excel::Writer::XLSX->new( 'chart_doughnut.xlsx' );
my $worksheet = $workbook->add_worksheet();
my $bold      = $workbook->add_format( bold => 1 );

# Add the worksheet data that the charts will refer to.
my $headings = [ 'Category', 'Values' ];
my $data = [
    [ 'Glazed', 'Chocolate', 'Cream' ],
    [ 50,       35,          15      ],
];

$worksheet->write( 'A1', $headings, $bold );
$worksheet->write( 'A2', $data );

# Create a new chart object. In this case an embedded chart.
my $chart1 = $workbook->add_chart( type => 'doughnut', embedded => 1 );

# Configure the series. Note the use of the array ref to define ranges:
# [ $sheetname, $row_start, $row_end, $col_start, $col_end ].
# See below for an alternative syntax.
$chart1->add_series(
    name       => 'Doughnut sales data',
    categories => [ 'Sheet1', 1, 3, 0, 0 ],
    values     => [ 'Sheet1', 1, 3, 1, 1 ],
);

# Add a title.
$chart1->set_title( name => 'Popular Doughnut Types' );

# Set an Excel chart style. Colors with white outline and shadow.
$chart1->set_style( 10 );

# Insert the chart into the worksheet (with an offset).
$worksheet->insert_chart( 'C2', $chart1, { x_offset => 25, y_offset => 10 } );


#
# Create a Doughnut chart with user defined segment colors.
#

# Create an example Doughnut chart like above.
my $chart2 = $workbook->add_chart( type => 'doughnut', embedded => 1 );

# Configure the series and add user defined segment colours.
$chart2->add_series(
    name       => 'Doughnut sales data',
    categories => '=Sheet1!$A$2:$A$4',
    values     => '=Sheet1!$B$2:$B$4',
    points     => [
        { fill => { color => '#FA58D0' } },
        { fill => { color => '#61210B' } },
        { fill => { color => '#F5F6CE' } },
    ],
);

# Add a title.
$chart2->set_title( name => 'Doughnut Chart with user defined colors' );


# Insert the chart into the worksheet (with an offset).
$worksheet->insert_chart( 'C18', $chart2, { x_offset => 25, y_offset => 10 } );


#
# Create a Doughnut chart with rotation of the segments.
#

# Create an example Doughnut chart like above.
my $chart3 = $workbook->add_chart( type => 'doughnut', embedded => 1 );

# Configure the series.
$chart3->add_series(
    name       => 'Doughnut sales data',
    categories => '=Sheet1!$A$2:$A$4',
    values     => '=Sheet1!$B$2:$B$4',
);

# Add a title.
$chart3->set_title( name => 'Doughnut Chart with segment rotation' );

# Change the angle/rotation of the first segment.
$chart3->set_rotation(90);

# Insert the chart into the worksheet (with an offset).
$worksheet->insert_chart( 'C34', $chart3, { x_offset => 25, y_offset => 10 } );


#
# Create a Doughnut chart with user defined hole size.
#

# Create an example Doughnut chart like above.
my $chart4 = $workbook->add_chart( type => 'doughnut', embedded => 1 );

# Configure the series.
$chart4->add_series(
    name       => 'Doughnut sales data',
    categories => '=Sheet1!$A$2:$A$4',
    values     => '=Sheet1!$B$2:$B$4',
);

# Add a title.
$chart4->set_title( name => 'Doughnut Chart with user defined hole size' );

# Change the hole size.
$chart4->set_hole_size(33);

# Insert the chart into the worksheet (with an offset).
$worksheet->insert_chart( 'C50', $chart4, { x_offset => 25, y_offset => 10 } );

$workbook->close();

__END__