Plotly三元散点图标记被覆盖:如何让标记显示在区域上方?
解决三元散点图标记被填充区域覆盖的问题
核心原因是Plotly按trace添加顺序渲染,后添加的元素会覆盖先添加的。你之前先加标记、再加填充区域,导致填充层压在标记上面。以下两种方案解决:
方案1:调整trace添加顺序
先添加填充区域,再添加标记,这样标记自然在上方:
import plotly.graph_objects as go fig = go.Figure() # 先添加填充区域trace fig.add_trace(go.Scatterternary(name='RedArea',a=[0.1,0.1,0.6],b=[0.7,0.4,0.5],c=[0.2,0.6,0.8],mode='lines',opacity=0.35,fill='toself', fillcolor='red')) # 再添加标记trace fig.add_trace(go.Scatterternary({ 'mode': 'markers', 'a': [0.3],'b': [0.5], 'c': [0.6], 'marker': {'color': 'AliceBlue','size': 14,'line': {'width': 2} },})) fig.update_layout({ 'ternary': { 'sum': 100, 'aaxis': {'nticks':1, 'ticks':""}, 'baxis': {'nticks':1}, 'caxis': {'nticks':1} }}) fig.update_traces( hovertemplate = "<b>CatA: %{a:.0f}<br>CatB: %{b:.0f}<br>CatC: %{c:.0f}<extra></extra>") fig.show()
方案2:手动设置标记的图层属性
如果实际场景中无法调整添加顺序(比如动态添加标记或区域),可以给标记trace设置layer='above'参数,强制让它显示在所有其他trace上方:
import plotly.graph_objects as go fig = go.Figure(go.Scatterternary({ 'mode': 'markers', 'a': [0.3],'b': [0.5], 'c': [0.6], 'marker': {'color': 'AliceBlue','size': 14,'line': {'width': 2} }, 'layer': 'above' # 关键:设置标记图层在上方 })) fig.update_layout({ 'ternary': { 'sum': 100, 'aaxis': {'nticks':1, 'ticks':""}, 'baxis': {'nticks':1}, 'caxis': {'nticks':1} }}) fig.add_trace(go.Scatterternary(name='RedArea',a=[0.1,0.1,0.6],b=[0.7,0.4,0.5],c=[0.2,0.6,0.8],mode='lines',opacity=0.35,fill='toself', fillcolor='red')) fig.update_traces( hovertemplate = "<b>CatA: %{a:.0f}<br>CatB: %{b:.0f}<br>CatC: %{c:.0f}<extra></extra>") fig.show()
说明:你之前尝试的update_ternaries里的axis_layer参数是控制坐标轴在trace上方还是下方,和trace之间的图层顺序无关,所以没效果。而layer属性是针对单个trace设置渲染层级,能直接解决trace间的覆盖问题。
内容的提问来源于stack exchange,提问作者User981636
相关产品推荐
相关产品推荐

