Плотно: Как настроить порядок легенды? - PullRequest
1 голос
/ 01 мая 2020

Я построил график scatter_geo в Python внутри графика.

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()

Есть ли возможность настроить заказ в метках легенды, если у меня только один след данных?

Coz теперь ярлыки в легенде выглядят так:

501-600
till 500
more 1001
601-1000

Да, мне нужно, чтобы они выглядели так:

till 500
501-600
601-1000
more 1001

1 Ответ

2 голосов
/ 03 мая 2020

Если вы посмотрите на traceorder , вы увидите, что элементы отображаются сверху вниз в том же порядке, что и входные данные для опции "normal". Таким образом, вы можете просто изменить порядок ваших входных данных, чтобы получить то, что вы хотите:

enter image description here

И если вы хотите указать произвольный порядок, Вы можете сделать это, определив порядок во входных данных. Задание порядка row может быть немного утомительным, поэтому я часто перемещаю фрейм данных, упорядочиваю категории, которые теперь появляются в столбце, и транспонирую его обратно в исходную форму:

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

При таком порядке результат будет таким же, как на рисунке выше. Вот обновленный фрагмент кода:

Полный код:

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()
...