FutureWarning: Pass the following variables as keyword args: x, y

Question:

I want to plot a seaborn regplot.
my code:

x=data['Healthy life expectancy']
y=data['max_dead']
sns.regplot(x,y)
plt.show()

However this gives me future warning error. How to fix this warning?

FutureWarning: Pass the following variables as keyword args: x, y. From version 0.12, the only valid 
positional argument will be 'data', and passing other arguments without an explicit keyword will 
result in an error or misinterpretation.
Asked By: cherry

||

Answers:

Seaborn 0.12

  • Some possible errors for incorrect use of positional arguments:
    • sns.regplot(tips.total_bill, tips.tip): TypeError: regplot() takes from 0 to 1 positional arguments but 2 were given.
    • sns.lmplot('petel_width', 'petal_length', data=iris): TypeError: lmplot() got multiple values for argument ‘data’
    • sns.kdeplot(x, y): TypeError: kdeplot() takes from 0 to 1 positional arguments but 2 positional arguments (and 1 keyword-only argument) were given
  • Only data may be specified as the first positional argument for seaborn plots. All other arguments must use keywords (e.g. x= and y=).

Seaborn 0.11

  • Technically, it’s a warning, not an error, and can be ignored for now, as shown in the bottom section of this answer.
  • I recommend doing as the warning says, specify the x and y parameters for seaborn.regplot, or any of the other seaborn plot functions with this warning.
  • sns.regplot(x=x, y=y), where x and y are parameters for regplot, to which you are passing x and y variables.
  • Beginning in version 0.12, passing any positional arguments, except data, will result in an error or misinterpretation.
    • For those concerned with backward compatibility, write a script to fix existing code, or don’t update to 0.12 (once available).
  • x and y are used as the data variable names because that is what is used in the OP. Data can be assigned to any variable name (e.g. a and b).
  • This also applies to FutureWarning: Pass the following variable as a keyword arg: x, which can be generated by plots only requiring x or y, such as:
    • sns.countplot(pen['sex']), but should be sns.countplot(x=pen['sex']) or sns.countplot(y=pen['sex'])
import seaborn as sns
import pandas as pd

pen = sns.load_dataset('penguins')

x = pen.culmen_depth_mm  # or bill_depth_mm
y = pen.culmen_length_mm  # or bill_length_mm

# plot without specifying the x, y parameters
sns.regplot(x, y)

enter image description here

# plot with specifying the x, y parameters
sns.regplot(x=x, y=y)

# or use
sns.regplot(data=pen, x='bill_depth_mm', y='bill_length_mm')

enter image description here

Ignore the warnings

  • I do not advise using this option.
  • Once seaborn v0.12 is available, this option will not be viable.
  • From version 0.12, the only valid positional argument will be data, and passing other arguments without an explicit keyword will result in an error or misinterpretation.
import warnings
warnings.simplefilter(action="ignore", category=FutureWarning)

# plot without specifying the x, y parameters
sns.regplot(x, y)

enter image description here

Answered By: Trenton McKinney
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.