1

I've searched for some time now and I can't seem to find a related question. There are similar questions, but nothing that gets to the heart of what I am trying to do with the code I have.

I am trying to add additional text to the hovertext in plotly. Here is my code so far:

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)

Note: 'merged' is the dataframe and is shown in the sample data below.

The code above gives the following output (note: hovering over the timepoint gives some information for each trace, and I took a picture to show what that looks like).
graph with subject count table

My question is how can I get the subject count number from the table into the hovertext for each trace at each timepoint (preferably on the second line of the hovertext that looks like 'N=x', where x is the subject number from the table under the graph in the picture).

Here is a sample of the dummy dataset I used to create this graph and table:

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
0

1 Answer 1

2

You want to set the text or hovertext element for each chart/trace. Both text and hovertext will work here. The reason you may need both can be seen here. You may also want to change the hoverinfo element. Your options are 'x', 'y', 'none', 'text', 'all'. Additional resources are: text and annotations, docs, and python example. In addition, to get the count of cases at a time period I took two different groupby operations and then concatenated them together.

Example using your dataframe:

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)

Similar SO questions are here and here

enter image description here

Sign up to request clarification or add additional context in comments.

6 Comments

Much appreciated!
Unfortunately, this doesn't get me where I need to be. There should only be four lines in the graph for study arm and I am trying to get the subject count for each study arm at each visit when hovering. Sorry, I jumped the gun on checking this as answering my question. I did up vote given i did learn a few things in your response however.
Thank You! I marked as answered and I truly appreciate your help. Any chance you could help me understand how to get the 'study_arm' (A, B, C, D) as the trace label instead of 0, 1, 2, 3?
Thank You! I will leave you alone now, but thank you so much for your help!!
I hate to ask this, but I've spent the last three hours trying to figure out to round the msjn number to two digits. This format you've given me is amazing, but what i've learned in the past doesn't seem to be working (i.e., hoverformat = '.2f').
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.