【问题标题】:How to setup Plotly two horizontal subplots containing heatmaps so that they don't share a colorscale?如何设置两个包含热图的水平子图,使它们不共享色阶?
【发布时间】:2017-02-18 07:52:45
【问题描述】:

我有两个热图。它们的值具有完全不同的比例,因此不应共享色标。我试图创建一个带有两个子图(水平排列)的情节图,并将我的每个热图放入其中一个子图中。但是,这两个热图在右侧的热图右侧共享相同的色阶。色阶显示两组标签相互重叠。我想看到的是有两个色标,每个热图的右侧都有一个。

我的代码如下。有人看到这里有问题吗?

fig = plotly.tools.make_subplots(rows=1, cols=2)

fig.append_trace(mm, 1, 1)
fig.append_trace(sm, 1, 2)

plotly.offline.iplot(fig)

我尝试将share_xaxesshare_yaxes 显式设置为False。没有帮助。

【问题讨论】:

    标签: ipython-notebook jupyter-notebook plotly


    【解决方案1】:

    您可以明确指定颜色条的x position,请参见下面的示例。

    笔记本上的图看起来更好,也许还应该移动正确的情节?

    import plotly.plotly as py
    import plotly.graph_objs as go
    import plotly
    plotly.offline.init_notebook_mode()
    
    mm = go.Heatmap(
            z=[[1, 20, 30],
               [20, 1, 60],
               [30, 60, 1]],
            colorbar = dict(x=0.45), 
        colorscale='Viridis'
        )
    sm = go.Heatmap(
            z=[[1, 2, 3],
               [2, 1, 6],
               [3, 6, 1]]
        )
    fig = plotly.tools.make_subplots(rows=1, cols=2)
    fig.append_trace(mm, 1, 1)
    fig.append_trace(sm, 1, 2)
    
    plotly.offline.iplot(fig)
    

    【讨论】:

    • 非常感谢@maximilian-peters 的回答(不确定如何在此处引用stackoverflow 用户名)。我遵循了您使用 colorbar.x 的建议,效果很好。 0.45 的定位也很好。如果两个热图碰巧共享 y 轴,那么我们可以使用 share_yaxes=True 以便热图 #1 的颜色条不会与热图 #2 的 y 轴重叠。然后,对于热图#2 的颜色条,我使用1.0 作为它的x 位置,这似乎与热图和两对颜色条之间的距离相匹配。
    • 不确定对马克西米利安彼得斯的引用是否有效@maximilian-peters 谢谢伙计!
    【解决方案2】:

    我找到了这个解决方案:对于 3 个热图,我创建了一个由 6 个框组成的网格,以便手动将每个热图的颜色条放在一边:

    fig = make_subplots(rows=1, cols=6,
                        subplot_titles=("Web", "Magasin", "Email"),
                        specs=[[{}, None, {}, None, {}, None]],
                        shared_yaxes=True)
    

    然后我通过定义每个颜色条来绘制热图:

    fig.add_trace(go.Heatmap(
        z=df_web.values,
        x=df_web.columns.tolist(),
        y=df_web.index.tolist(),
        colorscale='RdBu',
        reversescale=True,
        colorbar = dict(x=0.27, title='Nb moyen', thickness=15)), row=1, col=1
    )
    
    fig.add_trace(go.Heatmap(
        z=df_mag.values,
        x=df_mag.columns.tolist(),
        y=df_mag.index.tolist(),
        colorscale='RdBu',
        reversescale=True,
        colorbar = dict(x=0.62, title='Nb moyen', thickness=15)), row=1, col=3
    )
    
    fig.add_trace(go.Heatmap(
        z=df_email.values,
        x=df_email.columns.tolist(),
        y=df_email.index.tolist(),
        colorscale='RdBu',
        reversescale=True,
        colorbar = dict(x=0.97, title='Nb moyen', thickness=15)), row=1, col=5
    )
    

    最后我定义了位置:

    fig.update_layout(title_text='Répartition par jour et heure', title_x=0.5,
                    height=250, margin=dict(l=0,r=0,b=50,t=25),
                    xaxis=dict(
            domain=[0, 0.27]
        ),
        xaxis2=dict(
            domain=[0.35, 0.62]
        ),
        xaxis3=dict(
            domain=[0.7, 0.97]
        ))
    

    结果:

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 2018-07-27
      • 2017-03-09
      • 1970-01-01
      相关资源
      最近更新 更多