I’m trying to plot my heart rate and steps against when i have coffee.
The dataset is like this,
heartRate steps coffee created 2020-04-14 06:03:00 71.0 NaN 0 2020-04-14 09:03:00 72.0 NaN 1 2020-04-14 09:55:00 61.0 NaN 1 2020-04-14 09:58:00 67.0 NaN 1 2020-04-14 10:01:00 82.0 NaN 2
Where 1 is the hour i had coffee and 2 is 4 hours after and 0 is no coffee.
Currently I’m trying to plot these points out like this,
import seaborn as sns sns.set_theme(style="darkgrid") # Load an example dataset with long-form data fmri = tester # Plot the responses for different events and regions sns.lineplot(x="created", y="heartRate", style="medication", data=fmri)
But this is giving me a unreadable graph like this,
I’d love to have this be more readable – what am i doing wrong with this library?
Advertisement
Answer
Perhaps better take matplotlib. There you can play around with the graph size and the marker and line width to optimize and adjust.
import matplotlib.pyplot as plt from matplotlib import rc import pandas as pd import numpy as np from datetime import datetime, timedelta as delta font = {'family' : 'Arial', 'weight' : 'normal', 'size' : 60} rc('font', **font) ndays = 1000 start = datetime(2018, 12, 1) dates = [start - delta(days = x) for x in range(0, ndays)] df = pd.DataFrame({'time':dates, 'heartrate':np.random.randint(60,70,len(dates)), 'coffee':np.random.randint(0,2,len(dates))}) df['heartrate_coff'] = df['heartrate'] df['heartrate_nocoff'] = df['heartrate'] df.loc[df['coffee'].values==0,['heartrate_coff'] ]= np.nan df.loc[df['coffee'].values==1,['heartrate_nocoff']]= np.nan fig = plt.figure(num=None, figsize=(200, 10), dpi=9, facecolor='w', edgecolor='k') plt.plot(df['time'].values , df['heartrate'].values,'k-', linewidth=10) plt.plot(df['time'].values , df['heartrate_coff'].values,'rd',markersize=30) plt.plot(df['time'].values , df['heartrate_coff'].values,'rd-', linewidth=20) plt.plot(df['time'].values , df['heartrate_nocoff'].values,'ko',markersize=10) plt.xticks(rotation=-10)