Python_Calculative координаты для меток в Plotly lib - PullRequest
1 голос
/ 27 мая 2020

В приведенном ниже коде у меня есть метки маркеров на самой карте.

import plotly.express as px
import plotly.graph_objs as go
import pandas as pd

rows=[['501-600','15','122.58333','45.36667'],
      ['till 500','4','12.5','27.5'],
      ['more 1001','41','-115.53333','38.08'],
      ]

colmns=['bins','data','longitude','latitude']
df=pd.DataFrame(data=rows, columns=colmns)
df = df.astype({"data": int})

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

fig.update_traces(hovertemplate ='bins')

fig.add_trace(go.Scattergeo(lon=[float(d) + 5 for d in df["longitude"]],
              lat=[float(d) + 0 for d in df["latitude"]],
              text=df["data"],
              textposition="middle right",
              mode='text',
              showlegend=False))
fig.show()

Я поместил этот фрагмент кода:

float(d) + 5 for d in df["longitude"]],
lat=[float(d) + 0 for d in df["latitude"]]

, чтобы эти метки были рядом с маркерами. enter image description here Но при изменении размера карты эти надписи выглядят странно. Length between marker and it's label too big. Я считаю, что можно поставить в условие положения меток не только абсолютные значения, как сейчас, но и некую зависимость между координатами меток и значениями в данных.

1 Ответ

1 голос
/ 27 мая 2020

Один из способов, который может сработать для вас, - это заполнение значений df.data пробелами. Например, здесь данные дополняются тремя пробелами в новой переменной tag.

# tag = ['   15', '   4', '   41']
tag = "   " + df['data'].astype(str)

fig.add_trace(go.Scattergeo(lon=df["longitude"],
              lat=df["latitude"],
              text = tag,
              textposition="middle right",
              mode='text',
              showlegend=False))

или с использованием texttemplate:

fig.add_trace(go.Scattergeo(lon=df["longitude"],
              lat=df["latitude"],
              text=df["data"],
              textposition="middle right",
              mode='text',
              showlegend=False,
              texttemplate="   %{text}"
                           ))

UPDATE: дальнейшее форматирование можно выполнить с помощью texttemplate путем указания переменной ширины на основе df.data и использования выравнивания по правому краю; дополнительные параметры см. В Мини-язык спецификации формата . Примерно так:

#text template width based on formula width=x/12+3 and '>' to right justify
tt = ["%{text:>" + str(x/12 + 3) + "}" for x in df['data']]

fig.add_trace(go.Scattergeo(lon=df["longitude"],
              lat=df["latitude"],
              text=df["data"],
              textposition="middle right",
              mode='text',
              showlegend=False,
              texttemplate= tt
                           ))

оригинал:

enter image description here

увеличено:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...