Plotly中如何将整数型变量的自动色条改为图例?
解决Plotly 3D散点图整数分类变量显示图例而非色条的问题
要让整数类型的type变量(取值1、2、3)生成图例而非色条,核心是让Plotly把这些整数识别为离散分类而非连续数值,下面是两种简单可行的方法:
方法一:将整数转换为字符串类型
直接把生成的整数列表转成字符串,或者在生成时就用字符串取值:
import pandas as pd import plotly.express as px import numpy as np import random df = pd.DataFrame() df["x"] = np.sin(np.arange(100)) df["y"] = np.sin(np.arange(-100,100,2)) df["z"] = 2*np.sin(np.arange(100)) # 生成字符串类型的分类值 type_list = [] for i in range(100): type_list.append(random.choice(["1","2","3"])) # 直接用字符串 df["type"] = type_list # 或者先生成整数再转字符串: # type_list = [random.choice([1,2,3]) for _ in range(100)] # df["type"] = pd.Series(type_list).astype(str) fig = px.scatter_3d(data_frame=df, x="x", y="y", z="z", color="type") fig.show()
方法二:将列转换为Pandas分类类型
利用Pandas的Categorical类型标记该列为离散分类:
import pandas as pd import plotly.express as px import numpy as np import random df = pd.DataFrame() df["x"] = np.sin(np.arange(100)) df["y"] = np.sin(np.arange(-100,100,2)) df["z"] = 2*np.sin(np.arange(100)) type_list = [random.choice([1,2,3]) for _ in range(100)] df["type"] = pd.Categorical(type_list) # 标记为分类类型 fig = px.scatter_3d(data_frame=df, x="x", y="y", z="z", color="type") fig.show()
原理说明
Plotly Express会自动根据数据类型判断变量类型:
- 整数/浮点数默认被视为连续数值,因此生成色条展示数值梯度
- 字符串、Pandas分类类型会被视为离散分类,因此生成图例区分不同类别
通过上述两种方式修改数据类型后,Plotly就会为1、2、3生成对应的图例项,而非色条。
内容的提问来源于stack exchange,提问作者user16627746
相关产品推荐
相关产品推荐

