如何用Plotly Express为不同样本设置对应标记符号?
修正Plotly散点图样本标记样式问题
你的代码核心问题是未指定symbol参数关联样本类型列,仅设置symbol_sequence无法让Plotly根据样本类型切换标记样式。
以下是修正后的代码:
import plotly.express as px from sklearn.decomposition import PCA # 补充导入PCA,原代码可能遗漏 X_meth_kipan = meth_450_10k_kipan.iloc[:,9:-1].dropna(axis=1) pca = PCA(n_components=2) components = pca.fit_transform(X_meth_kipan) # 关键修改:添加symbol参数关联type列,确保标记样式与样本类型绑定 fig = px.scatter(components, x=0, y=1, color=meth_450_10k_kipan["type"], color_discrete_sequence=["red", "green"], symbol=meth_450_10k_kipan["type"], # 新增:关联样本类型 symbol_sequence=["square", "circle"], # 对应tumor和normal的标记 width=600, height=600) fig.update_xaxes(automargin=True) fig.update_yaxes(automargin=True) fig.update_layout({'plot_bgcolor': 'rgb(240,240,240)','paper_bgcolor': 'rgb(240,240,240)',}) fig.show()
额外优化建议
如果不确定type列中tumor和normal的默认顺序,建议用symbol_map明确映射标记样式,避免顺序错误:
# 定义明确的类型-标记映射 symbol_map = {"tumor": "square", "normal": "circle"} fig = px.scatter(components, x=0, y=1, color=meth_450_10k_kipan["type"], color_discrete_sequence=["red", "green"], symbol=meth_450_10k_kipan["type"], symbol_map=symbol_map, # 使用映射替代sequence width=600, height=600)
这样修改后,tumor样本会显示红色方形,normal样本会显示绿色圆形,完全符合你的需求。
内容的提问来源于stack exchange,提问作者melolilili
相关产品推荐
相关产品推荐

