3

I made scatter_geo plot in Python within plotly.

import plotly.express as px
import pandas as pd

rows = [['501-600', '65', '122.58333', '45.36667'],
        ['till 500', '54', '12.5', '27.5'],
        ['more 1001', '51', '-115.53333', '38.08'],
        ['601-1000', '54', '120.54167', '21.98'],
        ]

colmns = ['bins', 'data', 'longitude', 'latitude']
df = pd.DataFrame(data=rows, columns=colmns)

fig = px.scatter_geo(df, lon='longitude', lat='latitude', color='bins',
                     opacity=0.5,
                     projection="natural earth")
fig.show()

Is there any possibility to customise the order in legend labels if I have only one trace of data?

Coz now labels in legend look like this:

501-600
till 500
more 1001
601-1000

But I need to make them look like that:

till 500
501-600
601-1000
more 1001
4
  • Does this answer your question? Customizing the order of legends in plotly Commented May 1, 2020 at 22:03
  • There are considered only case where you have several traces, but I have only one and need to customise labels in legend manually. Commented May 2, 2020 at 8:11
  • In order to demonstrate why one trace would need ordering, please consider sharing a complete example with a data samlple. And perhaps a screenshot. Commented May 2, 2020 at 9:04
  • @vestland, I've edited quesion, pls, check. Thx Commented May 2, 2020 at 11:13

1 Answer 1

7

If you take a look at traceorder you'll see that items are displayed top-to-bottom in the same order as the input data for the "normal" option. So you can just change the order of your input data to get what you want:

enter image description here

And if you'd like to specify an arbitrary order, you can do so by defining the order in the input data. Specifying row order can ba a bit tedious, so I often transpose the dataframe, order the categories that now appear in the column, and transpose it right back to its original form:

order  = ['till 500', '501-600', '601-1000', 'more 1001']
df_ordered = df.T[order].T

With this order, the result will be the same as the figure above. Here's an updated code snippet:

Complete code:

import plotly.express as px
import pandas as pd

rows=[['501-600','65','122.58333','45.36667'],
      ['till 500','54','12.5','27.5'],
      ['more 1001','51','-115.53333','38.08'],
      ['601-1000','54','120.54167','21.98'],
      ]

colmns=['bins','data','longitude','latitude']
df=pd.DataFrame(data=rows, columns=colmns)

fig=px.scatter_geo(df,lon='longitude', lat='latitude',color='bins',
                      opacity=0.5,
                      projection="natural earth")
fig.show()


order  = ['till 500', '501-600', '601-1000', 'more 1001']
df = df.set_index('bins')
df_ordered = df.T[order].T.reset_index()
df_ordered

fig2=px.scatter_geo(df_ordered,lon='longitude', lat='latitude',color='bins',
                      opacity=0.5,
                      projection="natural earth")
fig2.show()
Sign up to request clarification or add additional context in comments.

2 Comments

Then what is the way of making reorder in input data not manually, but through code in this sample?
@Dmitry Change, yes. Customize, no. Again, look at traceorder. To customize the order of the input data you can organize your source as a pandas dataframe and take it from there.

Your Answer

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.