es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma de cambiar el tamaño de los elementos de la leyenda de un mapbox coroplético discreto creado con Plotly?

Estoy utilizando Python, si es útil, aunque creo que cualquier solución sería independiente del lenguaje. He creado un mapa de coropletas discretas utilizando plotly.express, pero al exportar a resoluciones altas, los elementos de la leyenda (tanto el formato como el color) se vuelven efectivamente ilegibles. Si recuerdo bien, Plotly crea figuras discretas superponiendo múltiples trazas, por lo que no estoy seguro de si hay algo que podamos hacer a nivel de traza o figura para solucionarlo.

Con gusto compartiré el código si es útil, aunque no estoy actualizando la leyenda de ninguna manera aún, así que no creo que aporte nada.

Código:

DISCRETO = 11

def gen_colorscale(obs, color=”viridis”):
color = px.colors.sample_colorscale(color, obs)
p1 = tuple(zip(np.linspace(0, 1, obs+1)[:-1], color))
p2 = tuple(zip(np.linspace(0, 1, obs+1)[1:], color))
cs = []
for a, b in zip(p1, p2):
cs.append(a)
cs.append(b)
return cs

cs = gen_colorscale(DISCRETO)

rango de colores

cr = [0, 10000]

valores de referencia

v = np.linspace(*cr, DISCRETO)
vt = (
pd.DataFrame(v, columns=[“v”])
.apply(lambda v: (v / 10 ** 3).round(1))
.apply(lambda v: v.astype(str) + “k a ” + v.shift(-1).astype(str) + “k”)
.values
)
vt[0] = v[0].astype(str) + ” a ” + (v[1] / 10 ** 3).round(1).astype(str) + “k”
vt[-1] = “>” + (v[-1] / 10 ** 3).round(1).astype(str) + “k”

fig = px.choropleth_mapbox(
df,
geojson=counties,
locations=”fips”,
color=”migration”,
range_color=[cr[0], cr[1] + cr[1]/(DISCRETO-1)],
color_continuous_scale=cs,
labels={“migration”: “Migración (k)”},
center={“lat”: 37.0902, “lon”: -95.7129},
zoom=4.2,
opacity=1.0,
mapbox_style=”white-bg”,
)
fig.update_layout(
mapbox_style=”mapbox://styles/ryangilland/ckwqzs8ck0h5f14nybww9c5ts”,
mapbox_accesstoken=token,
coloraxis_colorbar=dict(
tickvals=np.linspace(cr[0]+cr[1]/(DISCRETO-1)/2,cr[1] + cr[1]/(DISCRETO-1)/2,DISCRETO),
ticktext=vt,
len=0.8,
thickness=50,
xanchor=”right”,
x=1.0,
bgcolor=”rgba(22,33,49,1)”,
tickfont=dict(color=”rgba(255,255,255,1)”),
),
margin=dict(l=0, r=0, b=50, t=75, pad=4),
paper_bgcolor=”rgba(8,18,23,1)”,
plot_bgcolor=”rgba(8,18,23,1)”,
)
fig.show()

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como los elementos de leyenda se vuelven ilegibles en resoluciones altas al exportar un mapa de coropletas discretas de Mapbox utilizando Plotly Express, debemos ajustar el ancho de la barra de color o utilizar CSS para ajustar el tamaño de fuente. Podemos actualizar el tamaño de fuente en las etiquetas de marca de la barra de color utilizando CSS con el siguiente código:

    fig.update_layout(
        coloraxis_colorbar={
            'len': 0.8,
            'thickness': 50,
            'bgcolor': "rgba(22,33,49,1)",
            'tickfont': {'color': "rgba(255,255,255,1)", 'size': 16},
            'tickvals': np.linspace(cr[0]+cr[1]/(DISCRETE-1)/2,cr[1] + cr[1]/(DISCRETE-1)/2,DISCRETE),
            'ticktext': vt,
            'xanchor': "right",
            'x': 1.0
        },
        margin=dict(l=0, r=0, b=50, t=75, pad=4),
        paper_bgcolor="rgba(8,18,23,1)",
        plot_bgcolor="rgba(8,18,23,1)",
    )
    

    Podemos actualizar el tamaño de fuente en tickfont a cualquier tamaño de fuente que elijamos.

    Otro enfoque es reducir el grosor y aumentar la longitud de la barra de color para que los elementos de la leyenda sean visibles cuando se exportan a resoluciones altas. Podemos actualizar el grosor y la longitud de la barra de color utilizando el siguiente código:

    fig.update_layout(
        coloraxis_colorbar={
            'len': 0.6,
            'thickness': 20,
            'bgcolor': "rgba(22,33,49,1)",
            'tickfont': {'color': "rgba(255,255,255,1)"},
            'tickvals': np.linspace(cr[0]+cr[1]/(DISCRETE-1)/2,cr[1] + cr[1]/(DISCRETE-1)/2,DISCRETE),
            'ticktext': vt,
            'xanchor': "right",
            'x': 1.0
        },
        margin=dict(l=0, r=0, b=50, t=75, pad=4),
        paper_bgcolor="rgba(8,18,23,1)",
        plot_bgcolor="rgba(8,18,23,1)",
    )
    

    Podemos ajustar los valores de longitud y grosor según los requisitos para obtener elementos de leyenda legibles al exportar a resoluciones altas.

Comments are closed.