Note
Go to the end to download the full example code.
12.3.10.6.3. GUI integrated#
This demo shows how to render to output of the Python plotly
library in
custom user interfaces.
In the given ‘.ui’ file, a widget of the class type PlotlyPlot
is placed.
If the ItomPlotlyRenderer
renderer class is loaded and assigned as renderer
to ploty
, the show
method of the plotly.graph_objects.Figure
class has
another optional keyword argument plotHandle
, where you can pass the
itom.plotHandle
object of the corresponding widget in the ui file. Then
the output is rendered in this widget.
# this module must be imported in order to load an itom specific renderer
# for plotly and assign it as default.
import itomPlotlyRenderer
import plotly.express as px
# import the base class ItomUi from the module itomUi in the itom-packages subfolder
from itomUi import ItomUi
from itom import ui
class PlotlyGuiDemo(ItomUi):
def __init__(self):
"""Constructor."""
ItomUi.__init__(self, "plotlyGuiDemo.ui", ui.TYPEWINDOW, deleteOnClose=True)
self.plotlyPlot = self.gui.plotlyPlot
@ItomUi.autoslot("")
def on_btnClear_clicked(self):
"""Clear the canvas."""
self.plotlyPlot.call("setHtml", "")
@ItomUi.autoslot("")
def on_btnPlot1_clicked(self):
"""From the bar plot demo of plotly.
https://plotly.com/python/bar-charts/
"""
with self.disableGui(disableItems=[self.gui.groupActions]):
long_df = px.data.medals_long()
fig = px.bar(
long_df, x="nation", y="count", color="medal", title="Long-Form Input"
)
fig.show(plotHandle=self.plotlyPlot)
@ItomUi.autoslot("")
def on_btnPlot2_clicked(self):
"""From the distplot demo of plotly.
https://plotly.com/python/distplot/
"""
with self.disableGui(disableItems=[self.gui.groupActions]):
df = px.data.tips()
fig = px.histogram(
df,
x="total_bill",
y="tip",
color="sex",
marginal="rug",
hover_data=df.columns,
)
fig.show(plotHandle=self.plotlyPlot)
@ItomUi.autoslot("")
def on_btnPlot3_clicked(self):
"""From the animations demo of plotly.
https://plotly.com/python/animations/
"""
with self.disableGui(disableItems=[self.gui.groupActions]):
df = px.data.gapminder()
fig = px.bar(
df,
x="continent",
y="pop",
color="continent",
animation_frame="year",
animation_group="country",
range_y=[0, 4000000000],
)
fig.show(plotHandle=self.plotlyPlot)
@ItomUi.autoslot("")
def on_btnPlot4_clicked(self):
"""From the parallel coordinates plot demo of plotly.
https://plotly.com/python/parallel-coordinates-plot/
"""
with self.disableGui(disableItems=[self.gui.groupActions]):
df = px.data.iris()
fig = px.parallel_coordinates(
df,
color="species_id",
labels={
"species_id": "Species",
"sepal_width": "Sepal Width",
"sepal_length": "Sepal Length",
"petal_width": "Petal Width",
"petal_length": "Petal Length",
},
color_continuous_scale=px.colors.diverging.Tealrose,
color_continuous_midpoint=2,
)
fig.show(plotHandle=self.plotlyPlot)
if __name__ == "__main__":
win = PlotlyGuiDemo()
win.show()