如何在Python/Plotly的区域地图(choropleth plot)中放大地理地图?

4

我正在使用Plotly制作一张区域分布图(choropleth plot)。但是地理地图看起来太小了。

类似这样:

我的代码如下:

fig = px.choropleth(df,
                    geojson=geojson,
                    locations="Capitalize",
                    featureidkey="properties.name",
                    color="Scale",
                    hover_name='Capitalize',
                    hover_data=['Quantity'],
                    animation_frame="Period",
                    projection="mercator",)

fig.update_geos(fitbounds="locations", visible=False)
fig.update_layout(title_text = 'Product A',
                  autosize=True,
                  hovermode='closest',
                  title_x = 0.5,
                  margin={"r":0,"t":100,"l":0,"b":0},
                  geo=dict(showframe = False, showcoastlines = False))

width和height属性并不能完全符合我的要求。我只想扩大地理地图。在plotly中,我该如何做到这一点?


我将投影方式从Mercator改为等距圆柱投影。然后地理地图略微放大了一点。 - ryilkici
2个回答

5

我有同样的问题。我找到了这个相关问题,它说:

Plotly试图利用所有可用的空间而不改变图像比例。如果您有一个非常宽的div,由于顶部到底部会被填充,所以左右会有很多空白的空间。

我增加了我的布局的 height。从这里开始:

fig.update_layout(margin=dict(l=0, r=0, b=0, t=0),
                  width=1500)

转化为:

fig.update_layout(margin=dict(l=0, r=0, b=0, t=0),
                  width=1500, 
                  height=800)

这显著改善了我的图片大小。

但我的地图周围仍有相当多的空白区域。为了解决这个问题,我计算了边界框而不是使用fitbounds。我使用了一个名为turfpy的辅助模块来计算几何图形的边界框,并通过pip install turfpy命令进行了安装。

from turfpy.measurement import bbox
from functools import reduce

def compute_bbox(gj):
    gj_bbox_list = list(
        map(lambda f: bbox(f['geometry']), gj['features']))
    gj_bbox = reduce(
        lambda b1, b2: [min(b1[0], b2[0]), min(b1[1], b2[1]),
                        max(b1[2], b2[2]), max(b1[3], b2[3])],
        gj_bbox_list)
    return gj_bbox

gj_bbox = compute_bbox(gj)

fig = px.choropleth(fdf,
                    geojson=gj,
                    locations=locationcol,
                    color=datacol,
                    color_continuous_scale="Viridis",
                    range_color=(0, max_value),
                    featureidkey=key,
                    scope='europe',
                    hover_data=[namecol, 'LAD11NM']
                    )
fig.update_geos(
    # fitbounds="locations",
    center_lon=(gj_bbox[0]+gj_bbox[2])/2.0,
    center_lat=(gj_bbox[1]+gj_bbox[3])/2.0,
    lonaxis_range=[gj_bbox[0], gj_bbox[2]],
    lataxis_range=[gj_bbox[1], gj_bbox[3]],
    visible=False,
)

-1

请查看Plotly网站并向下滚动到fitbounds部分。

我认为你的问题可能是代码fig.update_geos(fitbounds =“locations”,visible=False)

在这里,你需要将“locations”更改为其他内容,例如“geojson”或“False”。

希望能解决你的问题!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接