等值线图中的自定义垃圾箱

问题描述 投票:0回答:1

我想使用

choropleth plotly
用我的数据创建一个全球地图。问题是我的数据有几个数量级的差异范围。我尝试使用对数刻度绘制数据,但它确实产生了预期的结果。我想在我的数据中创建自定义 bin 或 ticks。我该怎么做?我花了两天时间尝试了几次,但没有结果。

这是我的代码:

fig = px.choropleth(df, locations='value', color=np.log10(df['value'].replace(0, np.nan)),
                    color_continuous_scale="YlOrRd",
                    # range_color=(0, 12),
                    )

fig.update_layout(coloraxis_colorbar=dict(
    title="Value",
    tickvals=[1E-22,1E-10,1E-9,1E-8,1E-7,4.3E-06],
    ticktext=["<E-10","1E-10", "1E-9","1E-8","1E-7","4.3E-06"],
    # lenmode="pixels", len=100,
))

fig.show()

这就是我想要的:

python plotly choropleth
1个回答
0
投票

看起来像

go.Choropleth
colorscale
colorbar
作品:

import plotly.graph_objects as go

fig = go.Figure()

fig.add_trace(go.Choropleth(
    locations=df["Country Code"].values, 
    z=df["Log Value"].values,
    colorscale=your_colorscale,
    ],
    colorbar=dict(
        tick0=18,  # start
        dtick=2    # step
    )
))

fig.show()

your_colorscale
应该是这样的格式:

your_colorscale = [
    # Let first 10% (0.1) of the values have color rgb(0, 0, 0)
    [0, "rgb(0, 0, 0)"],
    [0.1, "rgb(0, 0, 0)"],

    # Let values between 10-20% of the min and max of z
    # have color rgb(20, 20, 20)
    [0.1, "rgb(20, 20, 20)"],
    [0.2, "rgb(20, 20, 20)"],

    # Values between 20-30% of the min and max of z
    # have color rgb(40, 40, 40)
    [0.2, "rgb(40, 40, 40)"],
    [0.3, "rgb(40, 40, 40)"]
    
    # And so on
]

注意值 0.1 和 0.2 出现了两次。看起来制作一个离散的颜色条很重要,而不是连续的。


另一种选择是将数据拆分为 bin,然后将其绘制为分类变量。

您使用

pd.cut

将值分成箱子
df["cut"] = pd.cut(df["variable"].values, your_bins, include_lowest=True)
df["cut"].cat.categories = ["name1", "name2", "name3", "name4", "name5"]

之后,绘制您的地图,但将

color_continuous_scale
替换为
color_discrete_map

color_discrete_map = dict(zip(
    ["name1", "name2", "name3", "name4", "name5"],
    colors_for_categories
))

fig = px.choropleth(
    df, locations="Country Code", color="cut",
    color_discrete_map=color_discrete_map
)
fig.show()

但这看起来更复杂。

© www.soinside.com 2019 - 2024. All rights reserved.