This problem is from my training class where I can add code only in method def draw_scatterplot(df). Using Anaconda Spyder, Python 3.8.3, Seaborn 0.10.1, Matplotlib 3.1.3. How can I return a plot with axes and data from my function def draw_scatterplot(df)?
import pandas as pd
import matplotlib
matplotlib.use('Agg')
import seaborn as sns
import pickle
def draw_scatterplot(df):
'''
Returns a scatter plot.
'''
# Create a scatter plot using Seaborn showing trend of A with B
# for C. Set the plot size to 10 inches in width and 2 inches
# in height respectively.
# add your code below
fig, ax1 = matplotlib.pyplot.subplots(figsize=(10,2))
ax2 = sns.scatterplot(x='A', y='B', data=df, ax=ax1, hue='C')
return fig
def serialize_plot(plot, plot_dump_file):
with open(plot_dump_file, mode='w+b') as fp:
pickle.dump(plot, fp)
def main():
df = pd.DataFrame(...)
plot2 = draw_scatterplot(df)
serialize_plot(plot2.axes, "plot2_axes.pk")
serialize_plot(plot2.data, "plot2_data.pk")
> Error: Traceback (most recent call last):
>
> File "myscatterplot.py", line 265, in <module>
> main()
>
> File "myscatterplot.py", line 255, in main
> serialize_plot(plot2.data, "plot2_data.pk")
>
> AttributeError: 'Figure' object has no attribute 'data'
Also I tried returning axes:
def draw_scatterplot(df):
'''
Returns a scatter plot
'''
fig, ax1 = matplotlib.pyplot.subplots(figsize=(10,2))
ax2 = sns.scatterplot(x='A', y='B', data=df, ax=ax1, hue='C')
return ax2
Error:
AttributeError: 'AxesSubplot' object has no attribute 'data'
for both returning figure and axes, the serialize_plot(plot2.axes, "plot2_axes.pk")
is working,
as axes is returned from function and I see file "plot2_axes.pk"
is created.