Jupyter Notebook中Plotly 3D散点图自定义颜色不生效如何解决
问题根因
自定义配色失效是因为数据传入px.scatter_3d的格式不符合Plotly Express的参数要求:
- 你提前将读入的Pandas DataFrame丢弃Label列后转成了Numpy数组,同时把Label列单独拆为Numpy数组传给
color参数 - 当传入的绘图主数据是无列名的Numpy数组、分类color参数也是独立Numpy数组时,Plotly无法正确建立分类值和自定义色序的映射关系,会直接跳过
color_discrete_sequence配置,加载默认内置配色。
当前默认配色效果:
修复方法
不要提前把DataFrame转成Numpy数组,直接基于原始DataFrame传入绘图函数,x/y/z/color参数均通过列名引用DataFrame字段即可,自定义配色会正常生效。
修正后可直接运行的代码:
import pandas as pd import plotly.express as px # 读取数据,保留DataFrame结构,不要提前drop列、不要转.values为Numpy数组 df = pd.read_csv('SamplePlotlyData.csv') fig = px.scatter_3d( df, x='36', # 对应第一主成分列,如果你提前重命名了列直接替换为'PCA-1'即可 y='37', # 对应第二主成分列,可替换为'PCA-2' z='38', # 对应第三主成分列,可替换为'PCA-3' labels={'36':'PCA-1', '37':'PCA-2', '38':'PCA-3'}, # 坐标轴显示名称映射 color='Label', # 直接引用DataFrame中的分类标签列 color_discrete_sequence=["blue", "goldenrod", "magenta"], title='3d Plot of Top 3 PCA components' ) fig.show()
如果你需要给每个类别绑定固定颜色,避免分类顺序变化导致颜色错位,可以把
color_discrete_sequence替换为color_discrete_map参数,显式指定类别和颜色的对应关系:color_discrete_map={ 0: "blue", 1: "goldenrod", 2: "magenta" }
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

