【问题标题】:Hovering plotly悬停在情节
【发布时间】:2018-12-18 06:11:41
【问题描述】:

我正在绘制一个 3D 散点图:

d = {'x':[1,2,3,4], 'y':[2,3,1,5], 'z':[3,2,3,2], 't':[4,1,2,3], 'score':[2,3,1,2]}
df = pd.DataFrame (d)

xtitle = 'x'
ytitle = 'y'
ztitle = 'z'

trace1 = go.Scatter3d(x=df[xtitle], 
                        y= df[ytitle], 
                          z = df[ztitle],
                                       marker=dict(color=df['score'],
                                                   showscale=True,
                                                  colorbar=dict(
                                                    title='score)'
                                                )),                       
                                       mode='markers')

layout = go.Layout (
        scene = Scene(
            xaxis = dict (title = xtitle),
            yaxis = dict (title = ytitle),
            zaxis = dict (title = ztitle)
        )
    )
fig = go.Figure(data=[trace1], layout = layout)
plotly.offline.iplot(fig)

当我将鼠标悬停在一个点上时,它会显示 x、y 和 z 值。

在数据框df 中,我有另一个名为t 的列,我希望当我将鼠标悬停在某个点上时,它也会显示x、y、z、t 和分数。

我该怎么做?

【问题讨论】:

    标签: python python-3.x plotly


    【解决方案1】:

    使用hoverinfo 参数。

    trace1 = go.Scatter3d(x = df['x'], 
                          y = df['y'], 
                          z = df['z'],
                          text = ['t: %d<br>Score: %d'%(t,s) for t,s in df.loc[:,['t','score']].values],
                          hoverinfo = 'text',
                          marker=dict(color=df['score'],
                                      showscale=True,
                                      colorbar=dict(title='score')
                                      ),                       
                          mode='markers')
    

    【讨论】:

      【解决方案2】:

      您可以在跟踪中使用texthoverinfo

      import plotly.graph_objs as go
      from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
      init_notebook_mode(connected=True)
      import pandas as pd
      d = {'x':[1,2,3,4], 'y':[2,3,1,5], 'z':[3,2,3,2], 't':[4,1,2,3], 'score':[2,3,1,2]}
      df = pd.DataFrame (d)
      
      xtitle = 'x'
      ytitle = 'y'
      ztitle = 'z'
      
      trace1 = go.Scatter3d(
          x=df[xtitle], 
          y= df[ytitle], 
          z = df[ztitle],
          marker=dict(
              color=df['score'],
              showscale=True,
              colorbar=dict(title='score)')
          ),
          mode='markers',
          text = ["t: {}".format(x) for x in df['t'] ]  # <-- added line!
          # hoverinfo = df['t']  # alternative
      )
      
      layout = go.Layout (
              scene = dict(
                  xaxis = dict (title = xtitle),
                  yaxis = dict (title = ytitle),
                  zaxis = dict (title = ztitle)
              )
          )
      fig = go.Figure(data=[trace1], layout = layout)
      iplot(fig)
      

      有用的链接:SO answer 0SO answer 1SO answer 2。您想使用text 属性、hoverinfohovertextHere is the documentation.

      【讨论】:

        【解决方案3】:

        这个工作非常简单,而且非常简单,如果你想为悬停添加更多数据,我会给你一些额外的例子:

        import plotly.graph_objs as go
        from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
        init_notebook_mode(connected=True)
        import pandas as pd
        d = {'x':[1,2,3,4], 'y':[2,3,1,5], 'z':[3,2,3,2], 't':[4,1,2,3],'t2':[6,8,5,9], 'score':[2,3,1,2]}
        df = pd.DataFrame (d)
        
        xtitle = 'x'
        ytitle = 'y'
        ztitle = 'z'
        
        trace1 = go.Scatter3d(
            x=df[xtitle], 
            y= df[ytitle], 
            z = df[ztitle],
            marker=dict(
                color=df['score'],
                showscale=True,
                colorbar=dict(title='score)')
            ),
            mode='markers',
            hoverinfo = 'Text t: ' + df['t']  # Display for 't' + content in df
                        + '<br>' +  # Intro space
                        'Text t2: ' + df['t2']  # Text to display for 't'
        
        )
        
        
        layout = go.Layout (
                scene = dict(
                    xaxis = dict (title = xtitle),
                    yaxis = dict (title = ytitle),
                    zaxis = dict (title = ztitle)
                )
            )
        fig = go.Figure(data=[trace1], layout = layout)
        plotly.offline.iplot(fig)
        

        重要提示:如果您的图表是带有痕迹的图形:您应该使用“hovertext”而不是“hoverinfo”

        fig = go.Figure(layout=layout)  
        fig.add_trace(go.Bar(
                x=df[xtitle], 
                y= df[ytitle], 
                z = df[ztitle],
                marker=dict(
                    color=df['score'],
                    showscale=True,
                    colorbar=dict(title='score)')
                ),
                mode='markers',
                hovertext = 'Text t: ' + df['t']  # Display for 't' + content in df
                            + '<br>' +  # Intro space
                            'Text t2: ' + df['t2']  # Text to display for 't'
          
            )
        

        【讨论】:

          猜你喜欢
          • 2016-03-06
          • 2020-08-26
          • 2021-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-25
          • 2012-11-09
          • 1970-01-01
          相关资源
          最近更新 更多