颜色条不遵守限制值

Ten*_*ero 6 python plotly

我有这个情节:

在此处输入图片说明

值范围从 0 到 1,但颜色条扩展到 1 以上和 0 以下。我希望颜色条不显示超出[0, 1]范围的值。如何才能做到这一点?

我的代码:

import numpy as np
import plotly.graph_objects as go

fig = go.Figure()
fig.add_trace(go.Contour(
        z=np.random.rand(10,10),
        x=np.linspace(0,10,10),
        y=np.linspace(0,10,10),
        contours=dict(
            start=0,
            end=1,
            size=0.25,
        ),
        colorbar=dict(
            tick0=0,
            dtick=1
        )
))
fig.show()
Run Code Online (Sandbox Code Playgroud)

jay*_*sea 6

似乎在使用contours.coloring='fill'(这是默认设置)时,zminzmax被忽略(由于某种原因)。若然contours.coloring='heatmap'zmin荣幸zmax。目前我没有看到好的解决办法,但这里有一些可能会有所帮助的事情......

如果您同意渐变,那么contours.coloring='heatmap'使用zmin=0zmax=1可能可以接受:

import numpy as np
import plotly.graph_objects as go

fig = go.Figure()
fig.add_trace(go.Contour(
        z=np.random.rand(10,10),
        x=np.linspace(0,10,10),
        y=np.linspace(0,10,10),
        contours=dict(
            start=0,
            end=1,
            size=0.25,
            coloring="heatmap",
        ),
        colorbar=dict(
            tick0=0,
            dtick=1,
        ),
        zmin=0,
        zmax=1
))
fig.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

另一个解决方案可能是为以下设置离散端点colorscale

fig = go.Figure()
fig.add_trace(go.Contour(
        z=np.random.rand(10,10),
        x=np.linspace(0,10,10),
        y=np.linspace(0,10,10),
        contours=dict(
            start=0,
            end=1,
            size=0.25,
        ),
        colorbar=dict(
            tick0=0,
            dtick=1
        ),
        colorscale=[
            [0, "rgb(180, 0, 0)"],
            [0.25, "rgb(180, 0, 0)"],

            [0.75, "rgb(0, 180, 180)"],
            [1, "rgb(0, 180, 180)"],
        ],
))
fig.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

不幸的是,如果您尝试将线条和填充结合起来并在整个过程中使用离散的颜色,则线条和填充不会完美对齐:

fig = go.Figure()
fig.add_trace(go.Contour(
        z=np.random.rand(10,10),
        x=np.linspace(0,10,10),
        y=np.linspace(0,10,10),
        contours=dict(
            start=0,
            end=1,
            size=0.25,
            coloring="heatmap",
        ),
        colorbar=dict(
            tick0=0,
            dtick=1,
        ),
        colorscale=[
            [0, "rgb(40, 40, 40)"],
            [0.25, "rgb(40, 40, 40)"],

            [0.25, "rgb(80, 80, 80)"],
            [0.5, "rgb(80, 80, 80)"],

            [0.5, "rgb(120, 120, 120)"],
            [0.75, "rgb(120, 120, 120)"],

            [0.75, "rgb(180, 180, 180)"],
            [1, "rgb(180, 180, 180)"],
        ],
        zmin=0,
        zmax=1,
))
fig.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 ...尽管我会再探索一些,看看是否还有另一个论点可以帮助这些对齐。

更新:在每一端的 10% 处使用白色的离散颜色将使我们大部分达到目标。我们还需要设置outlinecoloroutlinewidth来隐藏出现的难看的边框。

fig = go.Figure()
fig.add_trace(go.Contour(
        z=np.random.rand(10,10),
        x=np.linspace(0,10,10),
        y=np.linspace(0,10,10),
        contours=dict(
            start=0,
            end=1,
            size=0.25,
        ),
        colorbar=dict(
            tick0=0,
            dtick=1,
            outlinewidth=2,
            outlinecolor="rgb(255, 255, 255)",
        ),
        colorscale=[
            [0, "rgb(255, 255, 255)"],
            [0.1, "rgb(255, 255, 255)"],
            [0.1, "rgb(180, 180, 0)"], #here is where you set your min color
            [0.9, "rgb(0, 0, 180)"], #here is where you set your max color
            [0.9, "rgb(255, 255, 255)"],
            [1, "rgb(255, 255, 255)"],
        ],
))
fig.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述