Spaces:
Running
Running
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, | |
} | |
) | |
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() | |