I was hoping to create a function that will set the x axis limit for a plot. Here is what is working currently:
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()
Here is what I was hoping for:
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
However, there is an issue in set_limits with 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'
How can set_limits be modified in order to fix this?
matplotlib? e.g. where doespltcome from?pyplotis a stateful module which is meant to be convenient for people who are used to matlab. In particular, the statefulness is whyplt.set_xlimworks --pyplothas a reference to the figure (and axes) that you're currently working with. If you want to work with the plots themselves, this doesn't work (well) and you'll need to use the object oriented interface provided bymatplotlib.figure. reference. I suppose you could usepyplot.gcf()to get the current figure ...set_limitsfunction as written as used is theCollectionartist returned by scatter which does not have any notion of limits.