将Plot传递给函数Matplotlib Python

时间:2015-12-23 19:54:30

标签: python pandas matplotlib plot

我希望创建一个函数来设置绘图的x轴限制。以下是正在工作

import matplotlib.pyplot as plt

def scatter_plot(df, user_conditions):
    data_to_plot = user_conditions['data_to_plot']
    title = data_to_plot.replace("_", " ").title()
    df1 = df[['time',data_to_plot]]
    df1 = index_dataframe_time(df1)
    plt.scatter(df1.index.to_pydatetime(), df1[data_to_plot])
    min = df1.index.min()
    max = df1.index.max()
    plt.xlim(min, max)
    plt.title('Hour of Day vs '+title, fontsize=14)
    plt.show()

这是我所希望的:

def scatter_plot(df, user_conditions):
    data_to_plot = user_conditions['data_to_plot']
    title = data_to_plot.replace("_", " ").title()
    print title
    df1 = df[['time',data_to_plot]]
    df1 = index_dataframe_time(df1)
    plot = plt.scatter(df1.index.to_pydatetime(), df1[data_to_plot])
    plot = set_limits(df1, plot)
    plot.title('Hour of Day vs '+title, fontsize=14)
    plot.show()

def set_limits(df, plot):
    min = df.index.min()
    max = df.index.max()
    plot.xlim(min, max)
    return plot

set_limits plot.xlim(min,max)

存在问题
> Traceback (most recent call last):   
File
> "C:/Users/Application/main.py", line 115, in <module>
>     
main()   
> 
> File "C:/Users/Application/main.py", line
> 106,
> in main
>     plot_configuration(df, user_conditions)   File "C:/Users/Application/main.py", line 111,
> in plot_configuration
>     scatter_plot(df, user_conditions)   
File "C:/Users/Application/main.py", line 76,
> in scatter_plot
>     plot = set_limits(df1, plot)   File "C:/Users/Application/main.py", line 83,
> in set_limits
>     plot.xlim(min, max) AttributeError: 'PathCollection' object has no attribute 'xlim'

如何修改set_limits以解决此问题?

1 个答案:

答案 0 :(得分:0)

你可能想做这样的事情:

import matplotlib.pyplot as plt

def scatter_plot(ax, df, user_conditions):
    """
    Parameters
    ----------
    ax : matplotlib.axes.Axes
        The axes to put the data on
    df : pd.DataFrame
        The data
    user_conditions : dict (?)
        bucket of user input to control plotting?
    """
    data_to_plot = user_conditions['data_to_plot']
    title = data_to_plot.replace("_", " ").title()
    print(title)
    df1 = df[['time',data_to_plot]]
    df1 = index_dataframe_time(df1)
    # sc = ax.scatter(df1.index.to_pydatetime(), df1[data_to_plot])
    # only works in 1.5.0+
    sc = ax.scatter(df1.index.to_pydatetime(), data_to_plot,
                    data=df)
    set_limits(df1, ax)
    ax.set_title('Hour of Day vs '+title, fontsize=14)

    return sc

def set_limits(df, ax):
    min = df.index.min()
    max = df.index.max()
    ax.set_xlim(min, max)


fig, ax = plt.subplots()
arts = scatter_plot(ax, df, user_conditions)

如果你没有改变标记的大小或颜色,最好使用ax.plot(..., linestile='none', marker='o'),这样可以更快地渲染。在这种情况下(如果你有1.5.0 +)

ax.plot(data_to_plot, linestyle='none', marker='o', data=df)

它应该做正确的事情&#39;。