Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/openpyxl/chart/series.py: 65%
97 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1# Copyright (c) 2010-2022 openpyxl
4from openpyxl.descriptors.serialisable import Serialisable
5from openpyxl.descriptors import (
6 Typed,
7 String,
8 Integer,
9 Bool,
10 Alias,
11 Sequence,
12)
13from openpyxl.descriptors.excel import ExtensionList
14from openpyxl.descriptors.nested import (
15 NestedInteger,
16 NestedBool,
17 NestedNoneSet,
18 NestedText,
19)
21from .shapes import GraphicalProperties
22from .data_source import (
23 AxDataSource,
24 NumDataSource,
25 NumRef,
26 StrRef,
27)
28from .error_bar import ErrorBars
29from .label import DataLabelList
30from .marker import DataPoint, PictureOptions, Marker
31from .trendline import Trendline
33attribute_mapping = {
34 'area': ('idx', 'order', 'tx', 'spPr', 'pictureOptions', 'dPt', 'dLbls', 'errBars',
35 'trendline', 'cat', 'val',),
36 'bar':('idx', 'order','tx', 'spPr', 'invertIfNegative', 'pictureOptions', 'dPt',
37 'dLbls', 'trendline', 'errBars', 'cat', 'val', 'shape'),
38 'bubble':('idx','order', 'tx', 'spPr', 'invertIfNegative', 'dPt', 'dLbls',
39 'trendline', 'errBars', 'xVal', 'yVal', 'bubbleSize', 'bubble3D'),
40 'line':('idx', 'order', 'tx', 'spPr', 'marker', 'dPt', 'dLbls', 'trendline',
41 'errBars', 'cat', 'val', 'smooth'),
42 'pie':('idx', 'order', 'tx', 'spPr', 'explosion', 'dPt', 'dLbls', 'cat', 'val'),
43 'radar':('idx', 'order', 'tx', 'spPr', 'marker', 'dPt', 'dLbls', 'cat', 'val'),
44 'scatter':('idx', 'order', 'tx', 'spPr', 'marker', 'dPt', 'dLbls', 'trendline',
45 'errBars', 'xVal', 'yVal', 'smooth'),
46 'surface':('idx', 'order', 'tx', 'spPr', 'cat', 'val'),
47 }
50class SeriesLabel(Serialisable):
52 tagname = "tx"
54 strRef = Typed(expected_type=StrRef, allow_none=True)
55 v = NestedText(expected_type=str, allow_none=True)
56 value = Alias('v')
58 __elements__ = ('strRef', 'v')
60 def __init__(self,
61 strRef=None,
62 v=None):
63 self.strRef = strRef
64 self.v = v
67class Series(Serialisable):
69 """
70 Generic series object. Should not be instantiated directly.
71 User the chart.Series factory instead.
72 """
74 tagname = "ser"
76 idx = NestedInteger()
77 order = NestedInteger()
78 tx = Typed(expected_type=SeriesLabel, allow_none=True)
79 title = Alias('tx')
80 spPr = Typed(expected_type=GraphicalProperties, allow_none=True)
81 graphicalProperties = Alias('spPr')
83 # area chart
84 pictureOptions = Typed(expected_type=PictureOptions, allow_none=True)
85 dPt = Sequence(expected_type=DataPoint, allow_none=True)
86 data_points = Alias("dPt")
87 dLbls = Typed(expected_type=DataLabelList, allow_none=True)
88 labels = Alias("dLbls")
89 trendline = Typed(expected_type=Trendline, allow_none=True)
90 errBars = Typed(expected_type=ErrorBars, allow_none=True)
91 cat = Typed(expected_type=AxDataSource, allow_none=True)
92 identifiers = Alias("cat")
93 val = Typed(expected_type=NumDataSource, allow_none=True)
94 extLst = Typed(expected_type=ExtensionList, allow_none=True)
96 #bar chart
97 invertIfNegative = NestedBool(allow_none=True)
98 shape = NestedNoneSet(values=(['cone', 'coneToMax', 'box', 'cylinder', 'pyramid', 'pyramidToMax']))
100 #bubble chart
101 xVal = Typed(expected_type=AxDataSource, allow_none=True)
102 yVal = Typed(expected_type=NumDataSource, allow_none=True)
103 bubbleSize = Typed(expected_type=NumDataSource, allow_none=True)
104 zVal = Alias("bubbleSize")
105 bubble3D = NestedBool(allow_none=True)
107 #line chart
108 marker = Typed(expected_type=Marker, allow_none=True)
109 smooth = NestedBool(allow_none=True)
111 #pie chart
112 explosion = NestedInteger(allow_none=True)
114 __elements__ = ()
117 def __init__(self,
118 idx=0,
119 order=0,
120 tx=None,
121 spPr=None,
122 pictureOptions=None,
123 dPt=(),
124 dLbls=None,
125 trendline=None,
126 errBars=None,
127 cat=None,
128 val=None,
129 invertIfNegative=None,
130 shape=None,
131 xVal=None,
132 yVal=None,
133 bubbleSize=None,
134 bubble3D=None,
135 marker=None,
136 smooth=None,
137 explosion=None,
138 extLst=None,
139 ):
140 self.idx = idx
141 self.order = order
142 self.tx = tx
143 if spPr is None:
144 spPr = GraphicalProperties()
145 self.spPr = spPr
146 self.pictureOptions = pictureOptions
147 self.dPt = dPt
148 self.dLbls = dLbls
149 self.trendline = trendline
150 self.errBars = errBars
151 self.cat = cat
152 self.val = val
153 self.invertIfNegative = invertIfNegative
154 self.shape = shape
155 self.xVal = xVal
156 self.yVal = yVal
157 self.bubbleSize = bubbleSize
158 self.bubble3D = bubble3D
159 if marker is None:
160 marker = Marker()
161 self.marker = marker
162 self.smooth = smooth
163 self.explosion = explosion
166 def to_tree(self, tagname=None, idx=None):
167 """The index can need rebasing"""
168 if idx is not None:
169 if self.order == self.idx:
170 self.order = idx # rebase the order if the index has been rebased
171 self.idx = idx
172 return super(Series, self).to_tree(tagname)
175class XYSeries(Series):
177 """Dedicated series for charts that have x and y series"""
179 idx = Series.idx
180 order = Series.order
181 tx = Series.tx
182 spPr = Series.spPr
184 dPt = Series.dPt
185 dLbls = Series.dLbls
186 trendline = Series.trendline
187 errBars = Series.errBars
188 xVal = Series.xVal
189 yVal = Series.yVal
191 invertIfNegative = Series.invertIfNegative
193 bubbleSize = Series.bubbleSize
194 bubble3D = Series.bubble3D
196 marker = Series.marker
197 smooth = Series.smooth