在 Python 中,Plotly 不尊重颜色字典

Color Dictionary is not respected by Plotly in Python

我正在使用 Streamlit 创建一个仪表板,我发现了一些奇怪的东西,我的情节是可视化一个聚类算法,其中包含一个用于聚类数量的交互式数字输入。所以我希望如果我有 2 个输入,我将始终获得与标记颜色相同的值。

但是,每次我与网站交互时,颜色都会发生变化,我必须为我的集群获取这些颜色。

def plot_model(cluster_model):
    cluster_color_dict = {
        1:'yellow',
        2:'CornflowerBlue',
        3:'orange',
        4:'green',
        5:'black',
        6:'fuchsia',
        7:'red',
        8:'aqua',
        9:'deepskyblue',
        10:'greenyellow'
    }

    fig = px.scatter_3d(cluster_model,
                    x='NPHI',
                    y='RHOZ',
                    z='GR',
                    color='Clusters',
                    color_continuous_scale=list(cluster_color_dict.values()))

    fig.update_layout(margin=dict(l=0, r=0, b=0, t=0))
    fig.update_traces(marker_size=3)
    return fig

无论如何,我想也许一种方法是简单地生成一个数字数组 trim 字典的长度,这样它总是具有用户要求的颜色?

我遇到的问题是字典包含 10 个元素,但是传递给创建图形的函数的元素数量较少,所以如果我想要颜色一致,我只需要传递数字元素然后过滤字典,这样我总是在我的图表中得到相同的配色方案:

def plot_model(cluster_model,k):
    template = {
        1:'yellow',
        2:'CornflowerBlue',
        3:'orange',
        4:'green',
        5:'black',
        6:'fuchsia',
        7:'red',
        8:'aqua',
        9:'deepskyblue',
        10:'greenyellow'
    }
    i,j = 1,k
    cluster_color_dict = {}
    for k,v in template.items():
        if int(k) >= i and int(k) <= j:
            cluster_color_dict[k] = v




    fig = px.scatter_3d(cluster_model,
                    x='NPHI',
                    y='RHOZ',
                    z='GR',
                    color='Clusters',
                    color_continuous_scale=list(cluster_color_dict.values()))

    fig.update_layout(margin=dict(l=0, r=0, b=0, t=0))
    fig.update_traces(marker_size=3)
    return