schrodinger.ui.qt.schart module¶
A module for plotting with QChart.
Simple chart with a scatter plot and trendline:
- self.chart = schart.SChart(
title=’Simple Chart’, xtitle=’Hobnobs’, ytitle=’Grobniks’, layout=layout)
xvals = [3, 5, 9] yvals = [7, 12, 14] series_data = self.chart.addDataSeries(‘Production’, xvals,
yvals=yvals, fit=True)
Copyright Schrodinger, LLC. All rights reserved.
- schrodinger.ui.qt.schart.compute_tick_interval(length, max_ticks=11, deltas=(1, 2, 5, 10, 10))¶
Computes the tick interval to span length with a maximum number of ticks using deltas to get the preferred tick intervals (scaled to a range of 0-10).
Note: delta should start with 1 and end with two 10s.
- Parameters
length (float) – the length of the axis, usually the highest - lowest value
max_ticks (int) – the maximum number of ticks to use
deltas (indexable of float) – the preferred tick intervals to use
- Returns
the tick interval to use
- Return type
float
- class schrodinger.ui.qt.schart.SeriesData(series, bar_set=None)¶
Bases:
object
Holds the data for a plotted series
- __init__(series, bar_set=None)¶
Create a SeriesData object
- Parameters
series (QtCharts.QAbstractSeries) – The plotted series
bar_set (QtCharts.QBarSet) – For histograms, the plotted bar set
- createTrendLine(name=None, fitter=None)¶
Add or recompute a trendline to a series
- Parameters
name (str) – The name of the trendline series
fitter (callable) – The function to fit the data. Must have the same API as the fitLine method. If not provided, a linear regression is performed
- Raises
FitError – If an error occurs when fitting the data
- static fitLine(xvals, yvals, buffer=0)¶
Fit a trendline to the data
- Parameters
xvals (list) – The x values
yvals (list) – The y values
buffer (float) – The data points returned will be at the minimum x value minus the buffer and the maximum x value plus the buffer
- Return type
(list of float, list of float, scipy.stats._stats_mstats_common.LinregressResult`)
- Returns
The x values of the data points the form the line, the corresponding y values, and the scipy line fit resuls object
- exception schrodinger.ui.qt.schart.FitError¶
Bases:
Exception
Raised for an error in fitting a trendline
- class schrodinger.ui.qt.schart.BarSeriesSizeSpinBox(text, side='left', stretch=True, after_label='', layout=None, tip=None, **kwargs)¶
Bases:
schrodinger.ui.qt.swidgets.SLabeledDoubleSpinBox
A spinbox that can have its value updated without emitting a signal
A group of these spinboxes are all connected together. When the value of one spinbox changes, all of the others update their values. Thus, we need to catch the signal when the first spinbox value is changed, but need a way to update all the others without also triggering their valueChanged signals or we end up in an infinite loop.
- nonEmittingUpdate(value)¶
Change the value of the spinbox without emitting a signal
- Parameters
value (flot) – The new value of the spinbox
- class schrodinger.ui.qt.schart.SeriesParams(series, layout, row, name_only=False)¶
Bases:
object
A set of widgets that control the visual plotting of a QChart series
- SHAPES = {'Circle': MarkerShape.MarkerShapeCircle, 'Rectangle': MarkerShape.MarkerShapeRectangle}¶
- LINE = 'line'¶
- SCATTER = 'scatter'¶
- BAR = 'bar'¶
- SUPPORTED_TYPES = {<class 'PyQt6.QtCharts.QScatterSeries'>: 'scatter', <class 'PyQt6.QtCharts.QLineSeries'>: 'line', <class 'PyQt6.QtCharts.QBarSeries'>: 'bar'}¶
- __init__(series, layout, row, name_only=False)¶
Create a SeriesParams object
Note that there is no overall enclosing frame or layout for this set of widgets because they are placed individually in cells of a grid layout.
- Parameters
series (QtCharts.QAbstractSeries) – The plotted series. Currently this class is only implemented with Line and Scatter series in mind.
layout (QtWidgets.QGridLayout) – The layout to place these widgets in
row (int) – The row of the grid layout for these widgets
name_only (bool) – Show only the edit for the name of the series
- static getParamRows(series, layout, row)¶
Get a SeriesParam object for each set of plot items managed by this series. For an QXYSeries, there will be one SeriesParam. For a QBarSeries, there will be one SeriesParam for each QBarSet.
- Parameters
series (QtCharts.QAbstractSeries) – The series to create parameters for
layout (swidgets.SGridBoxLayout) – The layout to place the SeriesParam widgets in
row (int) – The row of the grid layout to place the widgets in
- Return type
list
- Returns
Each item of the list
- getSize()¶
Get the current size of the series. What “size” means depends on the the series type
- Return type
float
- Returns
The series size
- setSize()¶
Set the size of the series. What size means depends on the series type.
- getName()¶
Get the name of the series
- Return type
str
- Returns
The name of the series
- setName()¶
Set the name of the series based on the widget settings
- getColor()¶
Get the color of the series
- getColorFromWidget()¶
Get the color from the color widget
- Return type
QtGui.QColor
- Returns
The current color of the color widget
- setColor()¶
Set the color of the series
- apply()¶
Apply the current widget settings to the series
- class schrodinger.ui.qt.schart.BarSeriesParams(barset, *args, subrow=False, **kwargs)¶
Bases:
schrodinger.ui.qt.schart.SeriesParams
A set of widgets that control the visual plotting of a QChart bar series
- __init__(barset, *args, subrow=False, **kwargs)¶
Create a BarSeriesParams instance
- Parameters
barset (QtCharts.QBarSet) – The bar set for these parameters
subrow (bool) – False if this is for the first bar set in the series, True if for one of the lower ones. Only the first bar set sets the properties that must be the same for all sets in the series
- getSize()¶
See paraent method for documentation
- setSize()¶
See paraent method for documentation
- getName()¶
See paraent method for documentation
- setName()¶
See paraent method for documentation
- getColor()¶
See paraent method for documentation
- setColor()¶
See paraent method for documentation
- class schrodinger.ui.qt.schart.SeriesDialog(series, *args, title='Series Parameters', help_topic='QCHART_SERIES_DIALOG', **kwargs)¶
Bases:
schrodinger.ui.qt.swidgets.SDialog
A dialog allowing the user to control the visual look of series
- __init__(series, *args, title='Series Parameters', help_topic='QCHART_SERIES_DIALOG', **kwargs)¶
Create a SeriesDialog object
- Parameters
series (list) – The list of series to display in this dialog
See parent class for additional documentation
- layOut()¶
Lay out the widgets
- accept()¶
Apply the current settings
- class schrodinger.ui.qt.schart.AxisParams(axis, series, label, layout, row)¶
Bases:
object
A set of widgets to control QChart axis parameters
- __init__(axis, series, label, layout, row)¶
Create an AxisParams object
The widgets are in an enclosing frame.
- Parameters
axis (QtCharts.QValueAxis) – The axis to control
series (list) – The list of data series on the plot
label (str) – The name of the axis in the dialog
layout (QtWidgets.QGridBoxLayout) – The layout to place the widgets into
row (int) – The row in the grid layout where these params start
- apply()¶
Apply the current widget settings
- logChanged()¶
Check if the current state of the log checkbox is different from the current type of axis
- Return type
bool
- Returns
True if the current axis is inconsistent with the state of the log checkbox
- class schrodinger.ui.qt.schart.AxesDialog(axes, series, *args, title='Axes Parameters', help_topic='QCHART_AXES_DIALOG', **kwargs)¶
Bases:
schrodinger.ui.qt.swidgets.SDialog
A dialog for controlling the axes in a QtChart
- Parameters
axes (list) – A list of QAbstractAxes objects this dialog should control
See parent class for additional documentation
- logToggled¶
pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL
types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.
- __init__(axes, series, *args, title='Axes Parameters', help_topic='QCHART_AXES_DIALOG', **kwargs)¶
Create an AxesDialog object
- layOut()¶
Lay out the widgets
- accept()¶
Apply the current settings
- class schrodinger.ui.qt.schart.BinsDialog(series, *args, title='Number of Bins', help_topic='QCHART_BINS_DIALOG', **kwargs)¶
Bases:
schrodinger.ui.qt.swidgets.SDialog
A dialog for controlling the bins in a QtChart histogram
- BINS = 'Number of bins:'¶
- EDGES = 'Define bin edges:'¶
- __init__(series, *args, title='Number of Bins', help_topic='QCHART_BINS_DIALOG', **kwargs)¶
Create an BinsDialog object
- Parameters
series (list) – The list of series to display in this dialog
See parent class for additional documentation
- layOut()¶
Lay out the widgets
- modeChanged(update=True)¶
React to changing between defining the number of bins and the edge values
- Parameters
update (bool) – Whether to update the plotted bins
- updateToggled()¶
React to a change in the interactivity state
- updateBins(edges=None, force=False)¶
Update the plotted bins
- Parameters
edges (list) – A list of the bin edges. Each item is a float
force (bool) – Whether to force the update regardless of the interactivity state
- accept()¶
Update the bins and close the dialog
- reject()¶
Reset the bins to their original state and close the dialog
- class schrodinger.ui.qt.schart.SChartView(chart, width, height, layout=None)¶
Bases:
PyQt6.QtCharts.QChartView
The View for a QChart
- PADDING = 10¶
- HOVER_LABEL_X_FORMAT = '.3f'¶
- HOVER_LABEL_Y_FORMAT = '.3f'¶
- __init__(chart, width, height, layout=None)¶
Create an SChartView object
- Parameters
chart (QtCharts.QChart) – The chart for this view
width (int) – The recommended minimum width (pixels) of the chart
height (int) – The recommended minimum height (pixels) of the chart
layout (QtWidgets.QBoxLayout) – The layout to place this chart into
- sizeHint(*args)¶
Overwrite the parent method to ensure a minimum height and width of the chart. Without this QCharts open at a minimum unreadable size.
See parent method for implementation details
- setHoverLabelFormat(x_format=None, y_format=None)¶
Set the string format specifiers for the hover label. These values only apply if the data passed in to updateHoverLabel is not a string.
- Parameters
x_format (str) – The format for the x value (%.3f, %d, etc). If None, no change will be made to the current format.
y_format (str) – The format for the y value (%.3f, %d, etc). If None, no change will be made to the current format.
- updateHoverLabel(xval, yval, bold=False)¶
Update the text in the hover label
Can be overwritten in subclasses to show custom data
- clearHoverLabel()¶
Clear the hover label text
- readjustHoverLabel()¶
Make sure the hover label is in the upper right corner of the view
- paintEvent(*args, **kwargs)¶
Overwrite the parent method to make sure the hover label stays put
See parent method for implementation details
- class schrodinger.ui.qt.schart.SHistogramBarSeries(*args, **kwargs)¶
Bases:
PyQt6.QtCharts.QBarSeries
A QBarSeries with additional functionality for histograms
- binsChanged¶
pyqtSignal(*types, name: str = …, revision: int = …, arguments: Sequence = …) -> PYQT_SIGNAL
types is normally a sequence of individual types. Each type is either a type object or a string that is the name of a C++ type. Alternatively each type could itself be a sequence of types each describing a different overloaded signal. name is the optional C++ name of the signal. If it is not specified then the name of the class attribute that is bound to the signal is used. revision is the optional revision of the signal that is exported to QML. If it is not specified then 0 is used. arguments is the optional sequence of the names of the signal’s arguments.
- __init__(*args, **kwargs)¶
See parent class for documentation
- setEdges(edges)¶
Set the edges (the bin boundaries). Since the bins occur between the edges, there will be one more edge than there is bins
- Parameters
edges (list or numpy.array) – The bin edges. The first bin appears between edges[0] and edges[1], the last bin appears between edges[-2] and edges[-1]
- getEdges()¶
Get the edges (the bin boundaries). Since the bins occur between the edges, there will be one more edge than there is bins
- Return type
list or numpy.array
- Returns
The bin edges. The first bin appears between edges[0] and edges[1], the last bin appears between edges[-2] and edges[-1]
- hasEdges()¶
Check if this series has edges set yet or not
- Return type
bool
- Returns
Whether edges are set for this series or not
- updateHistograms(bin_settings)¶
Update all the histograms in this series based on the bin setting
- Parameters
bin_settings (str, int or list) – This is passed to the numpy.histogram method or the user’s supplied histogram method as the bins parameter. May be a string such as SChart.AUTO to indicate how the bins are to be determined. May be an integer to give the total number of bins, or may be a list of bin edge values.
- updateAxes()¶
Update the plot axes based on the current histograms
- getBinIndices(data, include_last_edge=True)¶
Get the zero-based bin indices of the passed data. The left limit of each bin is closed and the right limit is open. The index is -1 or num_bins if the value falls outside the range.
- Parameters
data (array_like) – The data to get indices for
include_last_edge (bool) – Whether the last right limit should be closed
- Return list
List of bin indices of each value in the passed data
- numBins()¶
Get the number of bins
- Return int
The number of bins
- class schrodinger.ui.qt.schart.SHistogramBarSet(data, name, series, fitter=<function histogram>)¶
Bases:
PyQt6.QtCharts.QBarSet
A QBarSet with additional functionality for histograms
- __init__(data, name, series, fitter=<function histogram>)¶
Create an SHistogramBarSet instance
- Parameters
data (list) – If fitter is not None, data is the values that the fitter will compute the histogram from. If fitter is None, data is the pre-computed histogram values
name (str) – The name of this histogram set
series (SHistogramBarSeries) – The series this barset is part of
fitter (callable) – The function used to fit the histogram. By default it is the numpy.histogram function. Any user-supplied function should have the same api. Use None to indicate that the list of values in data are the precomputed histogram values and should not be recomputed.
- fixLegend(legend)¶
Fix the legend marker shapes for this bar set
- Parameters
legend (QLegend) – The legend containing markers for this set
- updateHistogram(bin_settings)¶
Update the histogram based on the current bin settings
- Parameters
bin_settings (str, int or list) – This is passed to the numpy.histogram method or the user’s supplied histogram method as the bins parameter. May be a string such as SChart.AUTO to indicate how the bins are to be determined. May be an integer to give the total number of bins, or may be a list of bin edge values.
- Return type
(numpy.array, numpy.array)
- Returns
The first array is the list of values, one for each bin of the histogram. The second array is the bin ediges. There is one more edge than bin.
- class schrodinger.ui.qt.schart.SChart(master=None, title='', xtype=None, ytype=None, xlog=None, ylog=None, xtitle='', ytitle='', width=400, height=400, legend='right', tracker=True, tools=('zoom_in', 'axes', 'series', 'copy', 'legend'), colors=(<GlobalColor.blue: 9>, <GlobalColor.red: 7>, <GlobalColor.darkGreen: 14>, <PyQt6.QtGui.QColor object>, <GlobalColor.cyan: 10>, <GlobalColor.magenta: 11>, <GlobalColor.darkYellow: 18>, <GlobalColor.darkBlue: 15>, <GlobalColor.green: 8>, <GlobalColor.darkRed: 13>, <GlobalColor.gray: 5>, <GlobalColor.darkCyan: 16>, <GlobalColor.darkMagenta: 17>, <GlobalColor.yellow: 12>), viewclass=<class 'schrodinger.ui.qt.schart.SChartView'>, layout=None)¶
Bases:
PyQt6.QtCharts.QChart
A customized implementation of the QChart class
- LINE = 'line'¶
- SCATTER = 'scatter'¶
- RIGHT = 'right'¶
- LEFT = 'left'¶
- BOTTOM = 'bottom'¶
- TOP = 'top'¶
- ALIGNMENTS = {'bottom': AlignmentFlag.AlignBottom, 'left': AlignmentFlag.AlignLeft, 'right': AlignmentFlag.AlignRight, 'top': AlignmentFlag.AlignTop}¶
- ZOOM = 'zoom_in'¶
- AXES = 'axes'¶
- SERIES = 'series'¶
- COPY = 'copy'¶
- LEGEND = 'legend'¶
- BINS = 'bins'¶
- DEFAULT_TOOLS = ['zoom_in', 'axes', 'series', 'copy', 'legend']¶
- VALUE = 'value'¶
- LOG = 'log'¶
- CATEGORY = 'category'¶
- BASE_10 = 10¶
- AUTO = 'auto'¶
- DEFAULT_AXIS_BUFFER_PCT = 10.0¶
- DEFAULT_AXIS_FONT_SIZE = 0¶
- DEFAULT_CATEGORY_LABEL_ANGLE = -60¶
- DEFAULT_NONCATEGORY_LABEL_ANGLE = 0¶
- COPY_RESOLUTION = 5¶
- COLORS = (<GlobalColor.blue: 9>, <GlobalColor.red: 7>, <GlobalColor.darkGreen: 14>, <PyQt6.QtGui.QColor object>, <GlobalColor.cyan: 10>, <GlobalColor.magenta: 11>, <GlobalColor.darkYellow: 18>, <GlobalColor.darkBlue: 15>, <GlobalColor.green: 8>, <GlobalColor.darkRed: 13>, <GlobalColor.gray: 5>, <GlobalColor.darkCyan: 16>, <GlobalColor.darkMagenta: 17>, <GlobalColor.yellow: 12>)¶
- __init__(master=None, title='', xtype=None, ytype=None, xlog=None, ylog=None, xtitle='', ytitle='', width=400, height=400, legend='right', tracker=True, tools=('zoom_in', 'axes', 'series', 'copy', 'legend'), colors=(<GlobalColor.blue: 9>, <GlobalColor.red: 7>, <GlobalColor.darkGreen: 14>, <PyQt6.QtGui.QColor object>, <GlobalColor.cyan: 10>, <GlobalColor.magenta: 11>, <GlobalColor.darkYellow: 18>, <GlobalColor.darkBlue: 15>, <GlobalColor.green: 8>, <GlobalColor.darkRed: 13>, <GlobalColor.gray: 5>, <GlobalColor.darkCyan: 16>, <GlobalColor.darkMagenta: 17>, <GlobalColor.yellow: 12>), viewclass=<class 'schrodinger.ui.qt.schart.SChartView'>, layout=None)¶
Create an SChart object
- Parameters
master (QtWidgets.QWidget) – A QWidget - required for parenting dialogs
title (str) – The chart title
xtype (str) – The type of x axis. If None, it will be inferred.
ytype (str) – The type of y axis. If None, it will be inferred.
xlog (int) – The log base of the X axis (None for a non-log axis)
ylog (int) – The log base of the Y axis (None for a non-log axis)
xtitle (str) – The title of the X axis
ytitle (str) – The title of the Y axis
width (int) – The recommended minimum width (pixels) of the chart
height (int) – The recommended minimum height (pixels) of the chart
legend (str or None) – The alignment of the legend relative to the chart (one of the class legend side constants TOP, BOTTOM, RIGHT, LEFT), or None to not show the legend
tracker (bool) – Whether to show the label in the upper right corner that tracks the mouse coordinates
tools (tuple of str) – The tools to include in the toolbar - should be a tuple of class tools constants.
colors (list or None) – A list of colors to use when adding series without specifying the color explicitly. Use None to get the default QChart color cycle, which has 5 colors in the default theme and cycles repeatedly through them without noting which colors currently exist on the chart - leading often to multiple series with the same colors in dynamic charts. With colors specified, an attempt is made to reuse colors early in the list if no current series has that color, and no existing color is reused - instead a random color will be generated if all colors current exist on the chart.
viewclass (class or None) – The view class (not object) for this chart - typically a subclass of SChartView
layout (QtWidgets.QBoxLayout) – The layout to place this chart into
- setupToolBar(layout)¶
Create the toolbar
- Parameters
layout (QtWidgets.QBoxLayout) – The layout to place this toolbar into
- getChartImage()¶
Get the chart image
- Return type
QtGui.QImage
- Returns
The chart image as a QImage
- copyToClipboard()¶
Copy the chart image to the clipboard
- exportImage(file_path)¶
Export the chart image to a file
- Parameters
file_path (str) – The path to export the image to
- Return type
bool
- Returns
True if exported, False if export failed
- openBinsDialog()¶
Open the dialog that allows the user to modify the histogram bins
- getNextColor()¶
Get the next color to use for plotting a series. Colors at the beginning of the list will be reused if no series with that color currently exists. If all available colors are currently used, a random color will be generated.
- Return type
QtGui.QColor or None
- Returns
The next color to use for plotting, or None if there is no color list defined
- static setSeriesSize(series, size)¶
Set the size for this series. This is marker size for scatter plots or thickness for line plots.
- Parameters
series (QtCharts.QAbstractSeres) – The series to modify
size (int) – The size for the series
- Raises
RuntimeError – If the series is not scatter or line
- openSeriesDialog()¶
Open the dialog that allows user control of series parameters
- openAxesDialog()¶
Open the dialog that allows user control of axis parameters
- resetAxisLabels()¶
Reset axis labels’ angle and font size
- resetView()¶
Unzoom the plot and reset the axes parameters if necessary
- showLegend(show)¶
Set the legend visibility
- Parameters
show (bool) – The legend visibility
- hoverMoveEvent(event)¶
Catch the mouse moving in the chart and update the hover tracking label with its coordinates
- Parameters
event (QtGui.QHoverEvent) – The event object
- hoverLeaveEvent(event)¶
Hide the position tracker when the mouse leaves the chart area
- Parameters
event (QtGui.QGraphicsSceneHoverEvent) – The hover leave event
- addSeries(series)¶
Add the series to the chart
- Note
This function changes the color of black series to a theme color - this is done automatically by QtCharts when adding a series
- Parameters
series (QtCharts.QAbstractSeries) – The series to add to the chart
- static changeAxisFontSize(axis, labels=0, title=0)¶
Change the font sizes for the axis
- Parameters
axis (QAbstractAxis) – The axis
labels (int) – The font size for labels
title (int) – The font size for the title
- static isLogAxis(axis)¶
Check if this axis is a log axis
- Return type
bool
- Returns
Whether the axis is log or not
- static isValueAxis(axis)¶
Check if this axis is a value axis
- Return type
bool
- Returns
Whether the axis is value or not
- toggleLogAxis(old_axis, base=10)¶
Change a linear axis to log, or vise versa
- Parameters
old_axis (QAbstractAxis) – The axis to change
base (int) – The log base if changing to a log axis
- Return type
QAbstractAxis
- Returns
The new axis
- Raises
RuntimeError – if old_axis is not a QLogValueAxis or QValueAxis
- createAxis(side, title, log=10, unique=True, atype='value')¶
Create an axis on one side of the chart. Note that if an axis in that direction already exists, there will be multiple axes in that direction.
- Parameters
side (str) – A side class constant giving the side of the chart the axis will be on
title (str) – The label for the axis
log (int) – The log base of the axis if a log axis is requested
unique (bool) – If True, remove any existing axis on this side. Any series attached to a removed axis must be manually attached to a new axis.
atype (str) – The type of axis. Should be a class axis type constant
- Return type
QtCharts.QAbstractAxis
- Returns
The axis that was created
- setXMinMax(minimum=None, maximum=None, side='bottom')¶
Set the min and max values of the x axis
- Parameters
minimum (float) – The minimum value of the axis
maximum (float) – The maximum value of the axis
side (str) – The side of the plot the desired axis is attached to. Must be a class side constant.
- setYMinMax(minimum=None, maximum=None, side='left')¶
Set the min and max values of the y axis
- Parameters
minimum (float) – The minimum value of the axis
maximum (float) – The maximum value of the axis
side (str) – The side of the plot the desired axis is attached to Must be a class side constant.
- setAxisMinMax(axis, minimum, maximum)¶
Set the min and max values of an axis
- Parameters
axis (QtCharts.QAbstractAxis) – The axis to set.
minimum (float) – The minimum value of the axis
maximum (float) – The maximum value of the axis
- setXAutoRange(buffer=0, buffer_pct=10.0, side='bottom')¶
Automatically set the x axis range based on the min and max values of the plotted data
- Parameters
buffer (float) – Additional absolute amount to increase the axis range beyond the min and max plotted values (0 will truncate the axis at exactly the min and max values)
buffer_pct (float) – Additional percent amount to increase the axis range beyond the min and max plotted values. The percent is computed of the entire range and then applied to both the low and high end of the axis.
side (str) – The side of the plot the desired axis is attached to Must be a class side constant.
- setYAutoRange(buffer=0, buffer_pct=10.0, side='left')¶
Automatically set the y axis range based on the min and max values of the plotted data
- Parameters
buffer (float) – Additional absolute amount to increase the axis range beyond the min and max plotted values (0 will truncate the axis at exactly the min and max values)
buffer_pct (float) – Additional percent amount to increase the axis range beyond the min and max plotted values. The percent is computed of the entire range and then applied to both the low and high end of the axis.
side (str) – The side of the plot the desired axis is attached to Must be a class side constant.
- static getAxisDataRange(axis, series)¶
Find the range of data attached to the given axis
- Parameters
axis (QtCharts.QAbstractAxis) – The axis
series (list) – The current list of data series
- Return type
float, float
- Returns
The min and max data values. numpy.inf is returned if there is no associated data
- setAxisAutoRange(axis, buffer=0, buffer_pct=10.0)¶
Automatically set the y axis range based on the min and max values of the plotted data
- Parameters
axis (QtCharts.QAbstractAxis) – The axis to set.
buffer (float) – Additional absolute amount to increase the axis range beyond the min and max plotted values (0 will truncate the axis at exactly the min and max values)
buffer_pct (float) – Additional percent amount to increase the axis range beyond the min and max plotted values. The percent is computed of the entire range and then applied to both the low and high end of the axis.
- warning(msg, **kwargs)¶
Pop up a warning dialog with the given message
- Parameters
msg (str) – The message to display
- getSideAxis(side)¶
Get the axis associated with the given side of the chart. If more than one axis is associated with that side, the first one is returned.
- Parameters
side (str) – The side of the plot the desired axis is attached to. Must be a class side constant.
- Return type
QtCharts.QAbstractAxis
- Returns
The axis attached to this side of the chart
- Raises
KeyError – if side is not a valid constant
ValueError – If no such axis exists
- property bottom_axis¶
Get the axis on the bottom. Will return the first one if more than one exist
- Raises
ValueError – If no such axis exists
- Return type
QtCharts.QAbstractAxis
- Returns
The axis attached to the bottom side of the chart
- property left_axis¶
Get the axis on the left. Will return the first one if more than one exist
- Raises
ValueError – If no such axis exists
- Return type
QtCharts.QAbstractAxis
- Returns
The axis attached to the left side of the chart
- property top_axis¶
Get the axis on the top. Will return the first one if more than one exist
- Raises
ValueError – If no such axis exists
- Return type
QtCharts.QAbstractAxis
- Returns
The axis attached on the top side of the chart
- property right_axis¶
Get the axis on the right. Will return the first one if more than one exist
- Raises
ValueError – If no such axis exists
- Return type
QtCharts.QAbstractAxis
- Returns
The axis attached on the right side of the chart
- static getSeriesXVals(series)¶
Get the x values for a series
- Parameters
series (QtCharts.QXYSeries) – The series to get data from
- Return type
list
- Returns
The x values of all points in the series
- Raises
ValueError – if series is not a supported type
- static getSeriesYVals(series)¶
Get the y values for a series. Note that for bar series, ALL the y values of all the bar sets are returned as a single list.
- Parameters
series (QtCharts.QAbstractSeries) – The series to get data from. Only QXYSeries and QBarSeries are currently supported
- Return type
list
- Returns
The y values of all points in the series
- Raises
ValueError – if series is not a supported type
- addDataSeries(name, xvals, yvals=None, series_type=None, color=None, shape=None, size=None, line_style=PenStyle.SolidLine, legend=True, autorange=True, fit=False, fitter=None, xside='bottom', yside='left')¶
Add a new data series to the chart
- Parameters
name (str) – The name of the series - this will be the name of the series shown in the legend
xvals (list of float or list of tuple) – Either a list of x data, or a list of (x, y) tuples
yvals (list) – List of y data if xvals is not (x, y) tuples
series_type (str) – The series type - must be a class series type constant
color (
QtGui.QColor
or Qt.GlobalColor constant or None) – The color for this series. If None, a color from the current color list will be used.shape (QtCharts.QScatterSeries.MarkerShape) – For scatter series, the shape of the markers
size (int) – For scatter series, the size of the markers. For line series, the thickness of the line.
line_style (int) – Type of the line. Values from Qt::PenStyle enum
legend (bool) – Whether the series should show in the legend
autorange (bool) – Whether to auto-set the axes ranges after adding this series
fit (bool) – Whether to add a trendline to the series
fitter (callable) – A function to call to fit the trendline. Must follow the API of the fitLine method
xside (str) – The X axis side to attach the series to. Should be either BOTTOM or TOP
yside (str) – The Y axis side to attach the series to. Should be either LEFT or RIGHT
- Return type
- Returns
The newly created series will be in the SeriesData.series property. If a trendline is added, data about the trendline will also be included.
- addHistogram(name, values, bin_settings='auto', bar_series=None, color=None, size=1, legend=True, fitter=<function histogram>, xside='bottom', yside='left', barset_class=<class 'schrodinger.ui.qt.schart.SHistogramBarSet'>, barseries_class=<class 'schrodinger.ui.qt.schart.SHistogramBarSeries'>)¶
Add a new histogram to the chart.
Note that for QCharts, a “bar set” is a set of bars that make up a histogram (or other data related by a bunch of bars). A “bar series” is a collection of one or more bar sets. For instance, if you wanted to display two different histograms on the same chart in the same location. A bar set is much more analogous to a normal QXYSeries than a bar series is.
- Parameters
name (str) – The name of the histogram - this will be the name of the series shown in the legend
values (list) – The set of values from which the histogram will be computed. See also the fitter parameter.
bin_settings (str, int or list) – This is passed to the numpy.histogram method or the user’s supplied histogram method as the bins parameter. May be a string such as SChart.AUTO to indicate how the bins are to be determined. May be an integer to give the total number of bins, or may be a list of bin edge values. See also the bar_series parameter.
bar_series (SHistogramBarSeries) – An existing series that this histogram should be associated with. If used, the value of bin_settings is ignored if the bar_series has existing edges.
color (
QtGui.QColor
or Qt.GlobalColor constant or None) – The color for this histogram. If None, a color from the current color list will be used.size (int) – The width of the histogram bars. 1 indicates bars that should touch but not overlap. Values < 1 will leave a proportionate amount of space between the bars.
legend (bool) – Whether the series should show in the legend
fitter (callable) – A function to call to compute the histogram using the data in values. Must follow the API of the numpy.histgram function. If None, then the data in values is considered the pre-computed histogram and will be used directly without modification. In this case, the bin_settings should be the list of bin edges.
xside (str) – The X axis side to attach the series to. Should be either BOTTOM or TOP
yside (str) – The Y axis side to attach the series to. Should be either LEFT or RIGHT
barset_class (class) – The class to use to create the bar set for this histogram
barseries_class (class) – The class to use to create the bar series this histogram should be attached to.
- Return type
- Returns
The bar series will be in the SeriesData.series property. The new bar set will be in the SeriesData.bar_set property.
- seriesHovered(point, is_hovered)¶
Callback for when the mouse is over a point in the series
- Parameters
point (QtCore.QPointF) – The point the mouse is over
is_hovered – True if the mouse is over the point, False if the mouse left the point.
- barsHovered(is_hovered, index)¶
Callback for when the mouse is over a bar in a bar set
- Parameters
is_hovered – True if the mouse is over the bar, False if the mouse left the bar.
index (int) – The index of the bar the mouse is over. It may belong to one of many different bar sets
- addAndAttachSeries(series, xside='bottom', yside='left')¶
Add the series to the chart and attach it to the x and y axes
- Parameters
series (QtCharts.QAbstractSeries) – The series to add to the chart
xside (str) – The X axis side to attach the series to. Should be either BOTTOM or TOP
yside (str) – The Y axis side to attach the series to. Should be either LEFT or RIGHT
- addTrendLine(data, name=None, fitter=None)¶
Add a trendline to a series
- Parameters
data (SeriesData) – The SeriesData that contains the series to add the trendline to
name (str) – The name of the trendline series
fitter (callable) – The function to fit the data. Must have the same API as the fitLine method.
- showSeriesInLegend(series, show=True)¶
Set the visibility of the given series in the legend
- Parameters
series (QtCharts.QAbstractSeries) – The series to set the visibility for
show (bool) – Whether to show the series or not
- reset()¶
Remove all the series from the chart, resets the view, and resets axis labels
- class schrodinger.ui.qt.schart.Callout(chart, series, pos, text_list)¶
Bases:
PyQt6.QtWidgets.QGraphicsItem
A callout is a rounded rectangle that displays values for a point on a QChart
- __init__(chart, series, pos, text_list)¶
- paint(self, painter: QPainter, option: QStyleOptionGraphicsItem, widget: Optional[QWidget] = None)¶
- generateBoundingRect()¶
Creates a bounding rect based on text length/height and chart position
- boundingRect(self) QRectF ¶