Plotly Scattermapbox:有没有办法在标记上方和下方包含一些文本?没有办法、标记、文本、Plotly

2023-09-06 14:30:44 作者:South blocks 南荒

In Plotly, using Scattermapbox, is there a way to display some text above and below the markers?

Currently the text only appears when I hover on the markers, and the plot shows only part of the text that I would like to display.

鹅厂分享会丨使用 plotly 绘制数据图表

My input data frame df_area is as follows. I would like to display the text contained in both the name column and in the forecast column.

     name   latitude   longitude    forecast
 0   "AK"   2.675000   203.139000   "Cloudy"
 1   "Bd"   2.621000   203.224000   "Cloudy"

However, I can currently only display the text in the forecast column.

fig = go.Figure(go.Scattermapbox(
        lat=df_area["latitude"],
        lon=df_area["longitude"],
        mode="markers+text",
        marker={"size": 10},
        text=df_area["forecast"]))

解决方案

I included an example below, note that this requires a (free) mapbox access token.

import plotly.graph_objects as go
import pandas as pd

mapbox_access_token = 'your-free-token'

df = pd.DataFrame({'name': ['London', 'Oxford'],
                   'latitude': [51.509865, 51.7520],
                   'longitude': [-0.118092, -1.2577],
                   'forecast': ['Cloudy', 'Sunny']})

data = go.Scattermapbox(lat=list(df['latitude']),
                        lon=list(df['longitude']),
                        mode='markers+text',
                        marker=dict(size=20, color='green'),
                        textposition='top right',
                        textfont=dict(size=16, color='black'),
                        text=[df['name'][i] + '<br>' + df['forecast'][i] for i in range(df.shape[0])])

layout = dict(margin=dict(l=0, t=0, r=0, b=0, pad=0),
              mapbox=dict(accesstoken=mapbox_access_token,
                          center=dict(lat=51.6, lon=-0.2),
                          style='light',
                          zoom=8))

fig = go.Figure(data=data, layout=layout)