You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plotly中为ScatterMatrix散点矩阵图设置坐标轴对数刻度

解决Plotly散点矩阵图设置对数刻度的问题

方法1:批量设置所有轴为对数刻度

px.scatter_matrix生成的是多子图网格,每个子图的轴有独立标识,可通过for_each_xaxis和for_each_yaxis批量遍历所有轴并修改刻度类型:

import plotly.express as px
df = px.data.iris()
columns = ["sepal_width", "sepal_length", "petal_width", "petal_length"]
coloring_column = "species"

# 生成散点矩阵
fig = px.scatter_matrix(df, dimensions=columns, color=coloring_column)

# 批量设置所有y轴为对数刻度
fig.for_each_yaxis(lambda y_axis: y_axis.update(type="log"))
# 批量设置所有x轴为对数刻度
fig.for_each_xaxis(lambda x_axis: x_axis.update(type="log"))

fig.show()

方法2:指定特定维度的轴设置对数刻度

如果只需要给某个特定列对应的x/y轴设置对数,可通过轴的标题匹配目标列:

target_col = "sepal_length"

# 遍历x轴,匹配目标列标题则设置对数刻度
fig.for_each_xaxis(lambda x: x.update(type="log") if x.title.text == target_col else None)
# 遍历y轴,匹配目标列标题则设置对数刻度
fig.for_each_yaxis(lambda y: y.update(type="log") if y.title.text == target_col else None)

注意事项

  • 如果数据中包含0或负数,对数刻度无法正常渲染,需先预处理数据(比如添加极小偏移量):
    # 避免0/负数,给数值列加小偏移量
    df[columns] = df[columns].apply(lambda col: col + 1e-6 if col.min() <= 0 else col)
    
  • 若尝试fig.update_yaxes(type="log")未生效,可能是子图轴的matches属性限制,使用for_each_xaxis/for_each_yaxis是更可靠的方式。

内容的提问来源于stack exchange,提问作者adrckul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:55:24