2
$\begingroup$

I am using Plotly dash for creating a scatter plot. The legends I am getting in the final figure are randomly placed. I want to sort labels alphabetically from A to Z with category_orders.

fig = px.box(
        df,
        x=selected_x,
        y=selected_y,
        points='all',
        hover_data=hover_data,
        color=colour_by,
        width=800,
        height=600,
        labels={
            selected_y: "{} {}".format(selected_y_gene, selected_y),
            selected_x: "{} {}".format(selected_x_gene, selected_x),
        },
$\endgroup$

1 Answer 1

2
$\begingroup$

Before you construct the figure could you try sorting the values in the dataframe in the order you require? Thus set the True/False flag according to what you want.

orderedDF = df.sort_values(
  by=col_label, 
  ascending=True)

then add the following into the plot denoting the labels:

sort=False

Thus added below.

fig = px.box(
    orderedDF,
    x=selected_x,
    y=selected_y,
    points='all',
    hover_data=hover_data,
    color=colour_by,
    width=800,
    height=600,
    labels={
        selected_y: "{} {}".format(selected_y_gene, selected_y),
        selected_x: "{} {}".format(selected_x_gene, selected_x),
# I think it should go here
        sort=False
    }
    )

The gist is you are wanting to stop the automated re-ordering and force the dataframe order onto it.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.