/usr/lib/python3/dist-packages/xlsxwriter/chart_bar.py is in python3-xlsxwriter 0.5.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 133 134 135 136 137 | ###############################################################################
#
# ChartBar - A class for writing the Excel XLSX Bar charts.
#
# Copyright 2013, John McNamara, jmcnamara@cpan.org
#
from . import chart
class ChartBar(chart.Chart):
"""
A class for writing the Excel XLSX Bar charts.
"""
###########################################################################
#
# Public API.
#
###########################################################################
def __init__(self, options=None):
"""
Constructor.
"""
super(ChartBar, self).__init__()
if options is None:
options = {}
self.subtype = options.get('subtype')
if not self.subtype:
self.subtype = 'clustered'
self.cat_axis_position = 'l'
self.val_axis_position = 'b'
self.horiz_val_axis = 0
self.horiz_cat_axis = 1
self.show_crosses = 0
# Override and reset the default axis values.
self.x_axis['defaults']['major_gridlines'] = {'visible': 1}
self.y_axis['defaults']['major_gridlines'] = {'visible': 0}
if self.subtype == 'percent_stacked':
self.x_axis['defaults']['num_format'] = '0%'
self.set_x_axis({})
self.set_y_axis({})
###########################################################################
#
# Private API.
#
###########################################################################
def _write_chart_type(self, args):
# Override the virtual superclass method with a chart specific method.
if args['primary_axes']:
# Reverse X and Y axes for Bar charts.
tmp = self.y_axis
self.y_axis = self.x_axis
self.x_axis = tmp
if self.y2_axis['position'] == 'r':
self.y2_axis['position'] = 't'
# Write the c:barChart element.
self._write_bar_chart(args)
def _write_bar_chart(self, args):
# Write the <c:barChart> element.
if args['primary_axes']:
series = self._get_primary_axes_series()
else:
series = self._get_secondary_axes_series()
if not len(series):
return
subtype = self.subtype
if subtype == 'percent_stacked':
subtype = 'percentStacked'
# Set a default overlap for stacked charts.
if 'stacked' in self.subtype:
if self.series_overlap is None:
self.series_overlap = 100
self._xml_start_tag('c:barChart')
# Write the c:barDir element.
self._write_bar_dir()
# Write the c:grouping element.
self._write_grouping(subtype)
# Write the c:ser elements.
for data in series:
self._write_ser(data)
# Write the c:marker element.
self._write_marker_value()
# Write the c:gapWidth element.
self._write_gap_width(self.series_gap)
# Write the c:overlap element.
self._write_overlap(self.series_overlap)
# Write the c:axId elements
self._write_axis_ids(args)
self._xml_end_tag('c:barChart')
###########################################################################
#
# XML methods.
#
###########################################################################
def _write_bar_dir(self):
# Write the <c:barDir> element.
val = 'bar'
attributes = [('val', val)]
self._xml_empty_tag('c:barDir', attributes)
def _write_err_dir(self, val):
# Overridden from Chart class since it is not used in Bar charts.
pass
|