如何在Plotly中更改横竖线区间内散点的颜色?
实现Plotly散点图指定区间内散点变色的方法
要实现指定横竖线区间内散点变色,核心是先给数据标记出目标区间内的点,再通过Plotly的颜色映射区分显示,具体修改如下:
步骤1:给数据添加区间标记列
在生成散点图前,对plot_data新增一列,判断每个点是否落在你需要的目标区间。比如要选中x在3900-4221且y在4-4.65的区间,添加代码:
# 标记目标区间内的点,可按需修改区间范围 plot_data['in_target'] = plot_data.apply( lambda row: '目标区间内' if (3900 <= row['Calorific Value (kcal/kg)'] <= 4221) and (4 <= row['Hydrogen (%)'] <= 4.65) else '其他', axis=1 )
若需要区分多个不同区间,可扩展判断逻辑,给不同区间分配专属标签
步骤2:修改散点图生成代码
给px.scatter添加color参数绑定标记列,同时自定义颜色映射:
hydrogen = px.scatter( plot_data, x='Calorific Value (kcal/kg)', y='Hydrogen (%)', title='Hydrogen Plot', width=800, height=800, hover_name='Lab', color='in_target', # 用标记列控制颜色 color_discrete_map={'目标区间内': 'orange', '其他': 'blue'} # 自定义颜色 )
完整修改后的代码片段
parameters = st.selectbox("Parameters",("Carbon","Hydrogen","Nitrogen","Sulfur","Oxygen+Others","Moisture")) if parameters == 'Hydrogen': # 修正原代码语法缺失,添加if关键字 # 添加区间标记列 plot_data['in_target'] = plot_data.apply( lambda row: '目标区间内' if (3900 <= row['Calorific Value (kcal/kg)'] <= 4221) and (4 <= row['Hydrogen (%)'] <= 4.65) else '其他', axis=1 ) # 生成带颜色区分的散点图 hydrogen = px.scatter( plot_data, x='Calorific Value (kcal/kg)', y='Hydrogen (%)', title='Hydrogen Plot', width=800, height=800, hover_name='Lab', color='in_target', color_discrete_map={'目标区间内': 'orange', '其他': 'blue'} ) # 保留原横竖线添加逻辑 hydrogen.add_hline(y=4, line=dict(color='Red')) hydrogen.add_hline(y=4.65, line=dict(color='Red')) hydrogen.add_hline(y=6, line=dict(color='Red')) hydrogen.add_vline(x=3900, line=dict(color='Red')) hydrogen.add_vline(x=4221, line=dict(color='Red')) hydrogen.add_vline(x=4400, line=dict(color='Red')) st.plotly_chart(hydrogen)
注意事项
- 原代码缺少
if关键字,已在修改后的代码中修正 - 可根据实际需求调整
in_target的判断逻辑,比如选择其他横竖线围成的区间,或同时标记多个区间 color_discrete_map支持十六进制颜色码或英文颜色名,可自由替换
内容的提问来源于stack exchange,提问作者random235
相关产品推荐
相关产品推荐

