Plotly express strip plot指定ID点设置红色未生效问题排查
问题原因
px.strip()的color_discrete_sequence参数是为不同的分类组别分配颜色,不是为每行数据单独指定颜色。即便你传入长度和行数相等的颜色列表,plotly也只会按照实际的分类数量取列表前几个值使用,剩余值会被直接忽略。- 你没有给
px.strip()传入color参数,plotly默认所有点属于同一类别,只会取color_discrete_sequence的第一个颜色值(你的生成列表第一个值是蓝色,因为首行ID为1不在待标红列表中),因此所有点都显示为蓝色。
修复方案
新增一列标识是否为需要标红的ID,将该列作为color参数传入,再用color_discrete_map指定两类对应的颜色即可,修改后的代码如下:
import plotly.express as px import pandas as pd import random # 示例DataFrame df=pd.DataFrame({'Id':list(range(1,101)), 'Value':[random.randint(0,50) for i in range(100)]}) def strip_plotly(df,col_value,col_hover=[],col_color=None,highlight_ids=[]): # 新增高亮标记列 df['is_highlight'] = df[col_color].isin(highlight_ids) if col_color is not None else False fig = px.strip(df, y=col_value, hover_data = col_hover, color='is_highlight', color_discrete_map={True:"red", False:"blue"}) fig.update_layout({ 'plot_bgcolor': 'rgba(0,0,0,0)', 'paper_bgcolor': 'rgba(0,0,0,0)', }, hoverlabel=dict( font_size=12, ), xaxis={ 'title':"x", }, yaxis={'title':"y"}, title={ 'text': "strip plot for stackoverflow", 'x':0.5, 'xanchor': 'center', 'yanchor': 'top'} ) fig.update_xaxes(showspikes=True, spikecolor = 'black', showline=True, linewidth=1,linecolor='black', ticks = "outside", tickwidth = 1, tickcolor = 'black',ticklen = 5) fig.update_yaxes(showspikes=True, spikecolor = 'black', showline=True, linewidth=1,linecolor='black', ticks = "outside", tickwidth = 1, tickcolor = 'black',ticklen = 5) fig.show() # 调用函数 strip_plotly(df,"Value",col_hover=["Id"],col_color="Id",highlight_ids=[5,10])
内容的提问来源于stack exchange,提问作者Ewdlam
相关产品推荐
相关产品推荐

