Belle II Software development
Importance Class Reference
Inheritance diagram for Importance:
Plotter

Public Member Functions

 add (self, data, columns, variables)
 
 finish (self)
 
 add_subplot (self, gridspecs)
 
 save (self, filename)
 
 set_plot_options (self, plot_kwargs={ 'linestyle':''})
 
 set_errorbar_options (self, errorbar_kwargs={ 'fmt':'.', 'elinewidth':3, 'alpha':1})
 Overrides default errorbar options for datapoint errorbars.
 
 set_errorband_options (self, errorband_kwargs={ 'alpha':0.5})
 
 set_fill_options (self, fill_kwargs=None)
 
 setAxisLimits (self, factor=0.0)
 
 scale_limits (self)
 

Public Attributes

 dpi = dpi
 set default dpi
 
 plot_kwargs = None
 create figure
 
 errorbar_kwargs = None
 Default keyword arguments for errorbar function.
 
 errorband_kwargs = None
 Default keyword arguments for errorband function.
 
 fill_kwargs = None
 Default keyword arguments for fill_between function.
 
 prop_cycler = itertools.cycle(plt.rcParams["axes.prop_cycle"])
 Property cycler used to give plots unique colors.
 

Static Public Attributes

list plots = None
 Plots added to the axis so far.
 
list labels = None
 Labels of the plots added so far.
 
 xmin = None
 Minimum x value.
 
 xmax = None
 Maximum x value.
 
 ymin = None
 Minimum y value.
 
 ymax = None
 Maximum y value.
 
float yscale = 0.0
 create figure
 
float xscale = 0.0
 create figure
 
 figure = None
 figure which is used to draw
 
 axis = None
 Main axis which is used to draw.
 

Protected Member Functions

 _plot_datapoints (self, axis, x, y, xerr=None, yerr=None)
 

Detailed Description

Plots importance matrix

Definition at line 1510 of file plotting.py.

Member Function Documentation

◆ _plot_datapoints()

_plot_datapoints ( self,
axis,
x,
y,
xerr = None,
yerr = None )
protectedinherited
Plot the given datapoints, with plot, errorbar and make a errorband with fill_between @param x coordinates of the data points @param y coordinates of the data points @param xerr symmetric error on x data points @param yerr symmetric error on y data points

Definition at line 184 of file plotting.py.

184 def _plot_datapoints(self, axis, x, y, xerr=None, yerr=None):
185 """
186 Plot the given datapoints, with plot, errorbar and make a errorband with fill_between
187 @param x coordinates of the data points
188 @param y coordinates of the data points
189 @param xerr symmetric error on x data points
190 @param yerr symmetric error on y data points
191 """
192 p = e = f = None
193 plot_kwargs = copy.copy(self.plot_kwargs)
194 errorbar_kwargs = copy.copy(self.errorbar_kwargs)
195 errorband_kwargs = copy.copy(self.errorband_kwargs)
196 fill_kwargs = copy.copy(self.fill_kwargs)
197
198 if plot_kwargs is None or 'color' not in plot_kwargs:
199 color = next(self.prop_cycler)
200 color = color['color']
201 plot_kwargs['color'] = color
202 else:
203 color = plot_kwargs['color']
204 color = matplotlib.colors.ColorConverter().to_rgb(color)
205 patch = matplotlib.patches.Patch(color=color, alpha=0.5)
206 patch.get_color = patch.get_facecolor
207 patches = [patch]
208
209 if plot_kwargs is not None:
210 p, = axis.plot(x, y, rasterized=True, **plot_kwargs)
211 patches.append(p)
212
213 if errorbar_kwargs is not None and (xerr is not None or yerr is not None):
214 if 'color' not in errorbar_kwargs:
215 errorbar_kwargs['color'] = color
216 if 'ecolor' not in errorbar_kwargs:
217 errorbar_kwargs['ecolor'] = [0.5 * x for x in color]
218
219 # fully mask nan values.
220 # Needed until https://github.com/matplotlib/matplotlib/pull/23333 makes it into the externals.
221 # TODO: remove in release 8.
222 if not isinstance(xerr, (numpy.ndarray, list)):
223 xerr = xerr*numpy.ones(len(x))
224 if not isinstance(yerr, (numpy.ndarray, list)):
225 yerr = yerr*numpy.ones(len(y))
226 mask = numpy.logical_and.reduce([numpy.isfinite(v) for v in [x, y, xerr, yerr]])
227
228 e = axis.errorbar(
229 x[mask], y[mask], xerr=numpy.where(
230 xerr[mask] < 0, 0.0, xerr[mask]), yerr=numpy.where(
231 yerr[mask] < 0, 0.0, yerr[mask]), rasterized=True, **errorbar_kwargs)
232 patches.append(e)
233
234 if errorband_kwargs is not None and yerr is not None:
235 if 'color' not in errorband_kwargs:
236 errorband_kwargs['color'] = color
237 if xerr is not None:
238 # Ensure that xerr and yerr are iterable numpy arrays
239 xerr = x + xerr - x
240 yerr = y + yerr - y
241 for _x, _y, _xe, _ye in zip(x, y, xerr, yerr):
242 axis.add_patch(matplotlib.patches.Rectangle((_x - _xe, _y - _ye), 2 * _xe, 2 * _ye, rasterized=True,
243 **errorband_kwargs))
244 else:
245 f = axis.fill_between(x, y - yerr, y + yerr, interpolate=True, rasterized=True, **errorband_kwargs)
246
247 if fill_kwargs is not None:
248 # to fill the last bin of a histogram
249 x = numpy.append(x, x[-1]+2*xerr[-1])
250 y = numpy.append(y, y[-1])
251 xerr = numpy.append(xerr, xerr[-1])
252
253 axis.fill_between(x-xerr, y, 0, rasterized=True, **fill_kwargs)
254
255 return (tuple(patches), p, e, f)
256

◆ add()

add ( self,
data,
columns,
variables )
Add a new correlation plot. @param data pandas.DataFrame containing all data @param columns which are used to calculate the correlations

Reimplemented from Plotter.

Definition at line 1515 of file plotting.py.

1515 def add(self, data, columns, variables):
1516 """
1517 Add a new correlation plot.
1518 @param data pandas.DataFrame containing all data
1519 @param columns which are used to calculate the correlations
1520 """
1521
1522 def norm(x):
1523 width = (numpy.max(x) - numpy.min(x))
1524 if width <= 0:
1525 return numpy.zeros(x.shape)
1526 return (x - numpy.min(x)) / width * 100
1527
1528 importance_matrix = numpy.vstack([norm(data[column]) for column in columns]).T
1529 im = self.axis.imshow(
1530 importance_matrix[::-1], # <- reverse rows
1531 cmap=plt.cm.RdBu,
1532 vmin=0.0,
1533 vmax=100.0,
1534 aspect='equal',
1535 interpolation='nearest',
1536 origin='upper'
1537 )
1538
1539 num_y, num_x = importance_matrix.shape
1540
1541 # Adjust font size based on matrix size
1542 base_font_size = 14
1543 font_size = max(6, base_font_size * min(1.0, 25 / max(num_x, num_y)))
1544
1545 # Tick positions and labels
1546 self.axis.set_xticks(numpy.arange(num_x))
1547 self.axis.set_yticks(numpy.arange(num_y))
1548
1549 self.axis.set_xticklabels(columns, rotation=90, fontsize=font_size)
1550 self.axis.set_yticklabels(reversed(variables), fontsize=font_size)
1551
1552 self.axis.tick_params(top=True, bottom=False, labeltop=True, labelbottom=False)
1553
1554 # Add text annotations
1555 for y in range(num_y):
1556 for x in range(num_x):
1557 value = importance_matrix[-1-y, x] # Reverse y-axis for correct annotation
1558 txt = self.axis.text(
1559 x, y, f'{value:.0f}',
1560 ha='center', va='center',
1561 fontsize=font_size,
1562 color='white'
1563 )
1564 txt.set_path_effects([PathEffects.withStroke(linewidth=3, foreground='black')])
1565
1566 # Colorbar
1567 cb = self.figure.colorbar(im, ax=self.axis, ticks=[0.0, 100.0], orientation='vertical')
1568 cb.ax.set_yticklabels(['low', 'high'])
1569 cb.solids.set_rasterized(True)
1570
1571 # Layout tightening
1572 self.axis.set_xlim(-0.5, num_x - 0.5)
1573 self.axis.set_ylim(num_y - 0.5, -0.5) # origin='upper' flips y
1574
1575 return self
1576

◆ add_subplot()

add_subplot ( self,
gridspecs )
inherited
Adds a new subplot to the figure, updates all other axes according to the given gridspec @param gridspecs gridspecs for all axes including the new one

Definition at line 129 of file plotting.py.

129 def add_subplot(self, gridspecs):
130 """
131 Adds a new subplot to the figure, updates all other axes
132 according to the given gridspec
133 @param gridspecs gridspecs for all axes including the new one
134 """
135 for gs, ax in zip(gridspecs[:-1], self.figure.axes):
136 ax.set_position(gs.get_position(self.figure))
137 ax.set_subplotspec(gs)
138 axis = self.figure.add_subplot(gridspecs[-1], sharex=self.axis)
139 return axis
140

◆ finish()

finish ( self)
Sets limits, title, axis-labels and legend of the plot

Reimplemented from Plotter.

Definition at line 1577 of file plotting.py.

1577 def finish(self):
1578 """
1579 Sets limits, title, axis-labels and legend of the plot
1580 """
1581 return self
1582
1583

◆ save()

save ( self,
filename )
inherited
Save the figure into a file @param filename of the file

Definition at line 141 of file plotting.py.

141 def save(self, filename):
142 """
143 Save the figure into a file
144 @param filename of the file
145 """
146 b2.B2INFO("Save figure for class " + str(type(self)))
147 from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
148 canvas = FigureCanvas(self.figure)
149 canvas.print_figure(filename, dpi=self.dpi, bbox_inches='tight')
150 return self
151

◆ scale_limits()

scale_limits ( self)
inherited
Scale limits to increase distance to boundaries

Definition at line 281 of file plotting.py.

281 def scale_limits(self):
282 """
283 Scale limits to increase distance to boundaries
284 """
285 self.ymin *= 1.0 - math.copysign(self.yscale, self.ymin)
286 self.ymax *= 1.0 + math.copysign(self.yscale, self.ymax)
287 self.xmin *= 1.0 - math.copysign(self.xscale, self.xmin)
288 self.xmax *= 1.0 + math.copysign(self.xscale, self.xmax)
289 return self
290
291

◆ set_errorband_options()

set_errorband_options ( self,
errorband_kwargs = {'alpha': 0.5} )
inherited
Overrides default errorband options for datapoint errorband @param errorbar_kwargs keyword arguments for the fill_between function

Definition at line 168 of file plotting.py.

168 def set_errorband_options(self, errorband_kwargs={'alpha': 0.5}):
169 """
170 Overrides default errorband options for datapoint errorband
171 @param errorbar_kwargs keyword arguments for the fill_between function
172 """
173 self.errorband_kwargs = copy.copy(errorband_kwargs)
174 return self
175

◆ set_errorbar_options()

set_errorbar_options ( self,
errorbar_kwargs = {'fmt': '.', 'elinewidth': 3, 'alpha': 1} )
inherited

Overrides default errorbar options for datapoint errorbars.

Overrides default errorbar options for datapoint errorbars @param errorbar_kwargs keyword arguments for the errorbar function

Definition at line 160 of file plotting.py.

160 def set_errorbar_options(self, errorbar_kwargs={'fmt': '.', 'elinewidth': 3, 'alpha': 1}):
161 """
162 Overrides default errorbar options for datapoint errorbars
163 @param errorbar_kwargs keyword arguments for the errorbar function
164 """
165 self.errorbar_kwargs = copy.copy(errorbar_kwargs)
166 return self
167

◆ set_fill_options()

set_fill_options ( self,
fill_kwargs = None )
inherited
Overrides default fill_between options for datapoint errorband @param fill_kwargs keyword arguments for the fill_between function

Definition at line 176 of file plotting.py.

176 def set_fill_options(self, fill_kwargs=None):
177 """
178 Overrides default fill_between options for datapoint errorband
179 @param fill_kwargs keyword arguments for the fill_between function
180 """
181 self.fill_kwargs = copy.copy(fill_kwargs)
182 return self
183

◆ set_plot_options()

set_plot_options ( self,
plot_kwargs = {'linestyle': ''} )
inherited
Overrides default plot options for datapoint plot @param plot_kwargs keyword arguments for the plot function

Definition at line 152 of file plotting.py.

152 def set_plot_options(self, plot_kwargs={'linestyle': ''}):
153 """
154 Overrides default plot options for datapoint plot
155 @param plot_kwargs keyword arguments for the plot function
156 """
157 self.plot_kwargs = copy.copy(plot_kwargs)
158 return self
159

◆ setAxisLimits()

setAxisLimits ( self,
factor = 0.0 )
inherited
Sets the limits of the axis with an optional expansion factor. Parameters: factor (float): Fraction by which to expand the axis limits beyond the data range.

Definition at line 263 of file plotting.py.

263 def setAxisLimits(self, factor=0.0):
264 """
265 Sets the limits of the axis with an optional expansion factor.
266
267 Parameters:
268 factor (float): Fraction by which to expand the axis limits beyond the data range.
269 """
270 dx = self.xmax - self.xmin
271 dy = self.ymax - self.ymin
272 self.axis.set_xlim((self.xmin - factor*dx, self.xmax + factor*dx))
273 self.axis.set_ylim((self.ymin - factor*dy, self.ymax + factor*dy))
274

Member Data Documentation

◆ axis

axis = None
staticinherited

Main axis which is used to draw.

divide figure into subplots

Definition at line 75 of file plotting.py.

◆ dpi

dpi = dpi
inherited

set default dpi

Definition at line 86 of file plotting.py.

◆ errorband_kwargs

errorband_kwargs = None
inherited

Default keyword arguments for errorband function.

Definition at line 117 of file plotting.py.

◆ errorbar_kwargs

errorbar_kwargs = None
inherited

Default keyword arguments for errorbar function.

Definition at line 115 of file plotting.py.

◆ figure

figure = None
staticinherited

figure which is used to draw

Definition at line 73 of file plotting.py.

◆ fill_kwargs

fill_kwargs = None
inherited

Default keyword arguments for fill_between function.

Definition at line 119 of file plotting.py.

◆ labels

list labels = None
staticinherited

Labels of the plots added so far.

divide figure into subplots

create empty list for plots

create empty list for labels

Definition at line 61 of file plotting.py.

◆ plot_kwargs

plot_kwargs = None
inherited

create figure

divide figure into subplots

create empty list for plots

create empty list for labels

set x limits

set y limits

y limit scale

x limit scale

Default keyword arguments for plot function

Definition at line 113 of file plotting.py.

◆ plots

list plots = None
staticinherited

Plots added to the axis so far.

divide figure into subplots

create empty list for plots

Definition at line 59 of file plotting.py.

◆ prop_cycler

prop_cycler = itertools.cycle(plt.rcParams["axes.prop_cycle"])
inherited

Property cycler used to give plots unique colors.

Definition at line 127 of file plotting.py.

◆ xmax

xmax = None
staticinherited

Maximum x value.

divide figure into subplots

create empty list for plots

create empty list for labels

set x limits

Definition at line 65 of file plotting.py.

◆ xmin

xmin = None
staticinherited

Minimum x value.

create figure

divide figure into subplots

create empty list for plots

create empty list for labels

set x limits

Definition at line 63 of file plotting.py.

◆ xscale

float xscale = 0.0
staticinherited

create figure

limit scale

divide figure into subplots

create empty list for plots

create empty list for labels

set x limits

set y limits

y limit scale

x limit scale

Definition at line 71 of file plotting.py.

◆ ymax

ymax = None
staticinherited

Maximum y value.

divide figure into subplots

create empty list for plots

create empty list for labels

set x limits

set y limits

Definition at line 69 of file plotting.py.

◆ ymin

ymin = None
staticinherited

Minimum y value.

create figure

divide figure into subplots

create empty list for plots

create empty list for labels

set x limits

set y limits

Definition at line 67 of file plotting.py.

◆ yscale

float yscale = 0.0
staticinherited

create figure

limit scale

divide figure into subplots

create empty list for plots

create empty list for labels

set x limits

set y limits

y limit scale

Definition at line 70 of file plotting.py.


The documentation for this class was generated from the following file: