li-nguyen's picture
Bring over recent changes
2465927
raw
history blame
1.21 kB
import pandas as pd
import vizro.models as vm
import vizro.plotly.express as px
from plotly import graph_objects as go
from vizro import Vizro
from vizro.models.types import capture
salaries = pd.DataFrame(
{
"Job": ["Developer", "Analyst", "Manager", "Specialist"] * 2,
"Salary": [60000, 55000, 70000, 50000, 130000, 110000, 96400, 80000],
"Range": ["Min"] * 4 + ["Max"] * 4,
}
)
@capture("graph")
def dumbbell(data_frame: pd.DataFrame, x: str, y: str, color: str) -> go.Figure:
# Add two dots to plot
fig = px.scatter(data_frame, y=y, x=x, color=color)
# Add lines between dots
for y_value, group in data_frame.groupby(y):
fig.add_shape(
type="line",
layer="below",
y0=y_value,
y1=y_value,
x0=group[x].min(),
x1=group[x].max(),
line_color="grey",
line_width=3,
)
# Increase size of dots
fig.update_traces(marker_size=12)
return fig
page = vm.Page(
title="Dumbbell",
components=[vm.Graph(figure=dumbbell(salaries, y="Job", x="Salary", color="Range"))],
)
dashboard = vm.Dashboard(pages=[page])
Vizro().build(dashboard).run()