Plotly 中的对数热图
Posted
技术标签:
【中文标题】Plotly 中的对数热图【英文标题】:Logarithmic heatmap in Plotly 【发布时间】: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
值,而不是对数。
【问题讨论】:
提供的答案是您想要的吗? 还没来得及详细看。它看起来很接近我想要的,但颜色条仍然是线性的。 如果您觉得我的回答有用,如果您接受我将不胜感激! 我最终只是绘制了数据的对数,因为使用您的方法,图例仍然是线性的,并且当跨越多个数量级时变得难以阅读。无论如何,我可以给你投赞成票。 【参考方案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)
第一个给你(第二个选项很相似......):
【讨论】:
以上是关于Plotly 中的对数热图的主要内容,如果未能解决你的问题,请参考以下文章