【问题标题】:Logarithmic heatmap in PlotlyPlotly 中的对数热图
【发布时间】:2021-09-22 21:10:07
【问题描述】:

我正在使用heatmap from Plotly。我想对颜色使用对数刻度,但找不到如何操作。这是一个 MWE:

import plotly.graph_objects as go
import numpy as np

z = [[1e-4,1e-3,1e-2],
    [1e-1, 1, 1e1],
    [1e2, 1e3, 1e4]]

go.Figure(
    data = go.Heatmap(
        z = z,
    )
).show()

go.Figure(
    data = go.Heatmap(
        z = np.log(z),
    )
).show()

在 MWE 中,我手动计算数据的对数。我希望像第二张图那样显示颜色图,但不必手动转换数据,并且还可以在色标中显示真实的 z 值,而不是对数。

【问题讨论】:

  • 提供的答案是您想要的吗?
  • 还没来得及详细看。它看起来很接近我想要的,但颜色条仍然是线性的。
  • 如果您觉得我的回答有用,如果您接受我将不胜感激!
  • 我最终只是绘制了数据的对数,因为使用您的方法,图例仍然是线性的,并且当跨越多个数量级时变得难以阅读。无论如何,我可以给你投赞成票。

标签: python plotly heatmap plotly-python logarithm


【解决方案1】:

在 plotly homepage 上有一个示例,我将其改编为使用 viridis 色标。它并不完美...您可以根据需要使用colorscale 分母来调整它。

import plotly.graph_objects as go
import plotly.express as px
import numpy as np

viridis = px.colors.sequential.Viridis

z = [[1e-4,1e-3,1e-2],
    [1e-1, 1, 1e1],
    [1e2, 1e3, 1e4]]

fig1 = go.Figure(
    data = go.Heatmap(
        z = z,
    colorscale = [
        [0, viridis[0]],
        [1./1000000, viridis[2]],
        [1./10000, viridis[4]],
        [1./100, viridis[7]],
        [1., viridis[9]],
    ],
    colorbar= dict(
        tick0= 0,
        tickmode= 'array',
        tickvals= [0, 1000, 10000]
    )
    )
)

另一种选择是使用:

colorscale = [
        [0, viridis[0]],
        [1./1000000, viridis[2]],
        [1./10000, viridis[4]],
        [1./100, viridis[7]],
        [1., viridis[9]],
]
px.imshow(z, color_continuous_scale=colorscale, height=600, width=600)

第一个给你(第二个选项很相似......):

【讨论】:

    猜你喜欢
    • 2021-06-08
    • 2022-09-25
    • 2018-10-19
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2020-03-22
    • 2017-12-05
    • 2021-02-22
    相关资源
    最近更新 更多