繁体   English   中英

如何返回带有轴和数据的散点图?

[英]How can I return scatterplot with axes and data?

这个问题来自我的训练 class,我只能在方法 def draw_scatterplot(df) 中添加代码。 Using Anaconda Spyder, Python 3.8.3, Seaborn 0.10.1, Matplotlib 3.1.3. 如何返回 plot 以及来自我的 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'

我也尝试返回轴:

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'

对于返回的图形和轴, serialize_plot(plot2.axes, "plot2_axes.pk")正在工作,因为轴是从 function 返回的,我看到文件"plot2_axes.pk"已创建。

要从 function 返回整个图表,您可以返回您的fig变量。 它包含所有需要的信息。

import pandas as pd
import matplotlib 
import seaborn as sns 
import pickle 

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
    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({"A":[1,2,3], "B":[6,2,7], "C":[1,0,1]}) 
    plot2 = draw_scatterplot(df) 

main()

(我正在使用 juypter 笔记本。因此调用 main 而没有plot2.show

Output:

输出示例

我知道最终你想把你的身材丢进泡菜里。 为此,您可以直接转储plot2 (图),不需要plot2.data或类似的东西。

def main(): 
    df = pd.DataFrame(...) 
    plot2 = draw_scatterplot(df) 
    serialize_plot(plot2, "plot2.pk")

我更新了如下方法,现在没有收到错误。

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
fig.data = df
return fig

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM