在hovertext标签中添加其他文本

时间:2018-06-19 01:05:19

标签: python-3.x pandas jupyter-notebook plotly

我现在搜索了一段时间,似乎无法找到相关的问题。有类似的问题,但没有任何内容可以解释我试图用我的代码做的事情。

我正在尝试在plotly中添加其他文本到hovertext。到目前为止,这是我的代码:

import pandas as pd
import numpy as np

from plotly.offline import *
init_notebook_mode(connected=True)

graph1 = merged.groupby(['study_arm', 'visit_label'])['mjsn'].mean().unstack('study_arm')
graph1.iplot(mode='lines+markers',
                 symbol=['diamond-open', 'square-open', 'circle-dot', 'hexagon-open'],
                 size=8, colorscale = 'dark2', yTitle='ytitle', xTitle='xtitle',  
                 title='Title of Graph',
                 hoverformat = '.2f')


hv = merged.groupby(['study_arm', 'visit_label']).size()
print(hv)

注意:'merged'是数据框,显示在下面的示例数据中。

上面的代码给出了以下输出(注意:在时间点上方悬停会为每条迹线提供一些信息,我拍了一张照片来显示它的外观)。
graph with subject count table

我的问题是如何在每个时间点将表中的主题计数编号转换为每个跟踪的hovertext(最好是在hovertext的第二行,看起来像'N = x',其中x是主题编号来自图片中图表下的表格。

以下是我用于创建此图表和表格的虚拟数据集的 示例

subject_number  visit_label mjsn    study_arm
  20001         Day 1        0          B
  20001         Month 06     0.4        B
  20001         Month 12     0.2        B
  20003         Day 1        0          B
  20003         Month 06    -0.9        B
  20003         Month 12    -0.7        B
  20005         Day 1        0          C
  20005         Month 06     0.1        C
  20005         Month 12    -0.1        C
  20007         Day 1        0          D
  20007         Month 06     0          D
  20007         Month 12    -0.3        D
  20008         Day 1        0          C
  20008         Month 06    -0.3        C
  20008         Month 12    -0.1        C
  20010         Day 1        0          A
  20010         Month 06    -0.6        A
  20010         Month 12    -0.4        A

1 个答案:

答案 0 :(得分:2)

您要为每个图表/迹线设置texthovertext元素。文本和悬浮文本都将在这里工作。 here可以说明您可能同时需要两者的原因。您可能还需要更改hoverinfo元素。您的选择为'x', 'y', 'none', 'text', 'all'。其他资源包括:text and annotationsdocspython example。另外,为了获得某一时间段的案件数,我进行了两个不同的groupby操作,然后将它们串联在一起。

使用数据框的示例:

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

df = pd.DataFrame({
    'subject_number' : [20001, 20001, 20001, 20003, 20003, 20003, 20005, 20005, 
        20005, 20007, 20007, 20007, 20008, 20008, 20008, 20010, 20010, 20010], 

    'visit_label' : ['Day 1', 'Month 6', 'Month 12', 'Day 1', 'Month 6', 
        'Month 12', 'Day 1', 'Month 6', 'Month 12', 'Day 1', 'Month 6',  
        'Month 12', 'Day 1', 'Month 6', 'Month 12', 'Day 1', 'Month 6', 
        'Month 12'],  

    'mjsn':[0, 0.4, 0.2, 0, -0.9, -0.7, 0, 0.1, -0.1, 0, 0, -0.3, 0, -0.3, -0.1,
        0, -0.6, -0.4], 

    'study_arm':['B', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 
        'C', 'C', 'C', 'A', 'A', 'A']
    })



grouped = df.groupby(['study_arm', 'visit_label'])
tmp1 = grouped.mean()["mjsn"]
tmp2 = grouped.count()["subject_number"]
output_df = pd.concat([tmp1, tmp2], axis = 1)

data = []
for study in output_df.index.get_level_values(0).unique():
    trace = go.Scatter(
        x = output_df.loc[study, :].index,
        y = output_df.loc[study, "mjsn"],
        hovertext= ["msjn:{0}<br>subject:{1}".format(x, int(y)) 
                    for x,y in zip(output_df.loc[study, "mjsn"],
                        output_df.loc[study, "subject_number"])],
        mode = 'lines+markers',
        hoverinfo = 'text'
    )
    data += [trace]
#
iplot(data)

类似的问题是herehere

enter image description here