I am trying to produce a bar plot with a line of regression. I am trying to follow a previous suggestion for the same problem but get an error message that I am unable to overcome. My script is as follows:
import seaborn.apionly as sns
import matplotlib.pyplot as plt
import pandas as pd
sns.set(style="white", context="score")
data = {'Days':  ['5', '10', '15', '20'],
        'Impact': ['33.7561', '30.6281', '29.5748', '29.0482']
        }
a = pd.DataFrame (data, columns = ['Days','Impact'])
print (a)
ax = sns.barplot(data=a, x=a.Days, y=a.Impact, color='lightblue' )
# put bars in background:
for c in ax.patches:
    c.set_zorder(0)
# plot regplot with numbers 0,..,len(a) as x value
sns.regplot(x=np.arange(0,len(a)), y=a.Impact, ax=ax)
sns.despine(offset=10, trim=False)
ax.set_ylabel("")
ax.set_xticklabels(['5', '10','15','20'])
plt.show()
The error message I get is:
Traceback (most recent call last):
  File "C:UsersdavidAppDataLocalProgramsSpyderpkgsIPythoncoreasync_helpers.py", line 68, in _pseudo_sync_runner
    coro.send(None)
  File "C:UsersdavidAppDataLocalProgramsSpyderpkgsIPythoncoreinteractiveshell.py", line 3162, in run_cell_async
    self.displayhook.exec_result = result
  File "C:UsersdavidAppDataLocalProgramsSpyderpkgstraitletstraitlets.py", line 604, in __set__
    self.set(obj, value)
  File "C:UsersdavidAppDataLocalProgramsSpyderpkgstraitletstraitlets.py", line 578, in set
    new_value = self._validate(obj, value)
  File "C:UsersdavidAppDataLocalProgramsSpyderpkgstraitletstraitlets.py", line 610, in _validate
    value = self.validate(obj, value)
  File "C:UsersdavidAppDataLocalProgramsSpyderpkgstraitletstraitlets.py", line 1842, in validate
    if isinstance(value, self.klass):
TypeError: isinstance() arg 2 must be a type or tuple of types
ERROR! Session/line number was not unique in database. History logging moved to new session 54
but I am not sure what this means. Can anyone help?
Advertisement
Answer
Please ensure you supply int or float in the df
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
data = {'Days':  [5, 10, 15, 20],
        'Impact': [33.7561, 30.6281, 29.5748, 29.0482]
        }
a = pd.DataFrame (data, columns = ['Days','Impact'])
print (a)
ax = sns.barplot(data=a, x='Days', y='Impact', color='lightblue' )
# put bars in background:
for c in ax.patches:
    c.set_zorder(0)
# plot regplot with numbers 0,..,len(a) as x value
ax = sns.regplot(x=np.arange(0,len(a)), y=a['Impact'], marker="+")
sns.despine(offset=10, trim=False)
ax.set_ylabel("")
ax.set_xticklabels(['5', '10','15','20'])
plt.show()
 
						