plot_utils: make xlim and ylim consistent and accept strings as well as tuples
before xlim = None was different than ylim = None. Discard the None
and just make them accept strings that describe their purpose.
diff --git a/cr2/plot_utils.py b/cr2/plot_utils.py
index 45a9606..ec8ef15 100644
--- a/cr2/plot_utils.py
+++ b/cr2/plot_utils.py
@@ -33,11 +33,44 @@
return title
+def set_lim(lim, get_lim, set_lim):
+ """Set x or y limitis of the plot
+
+ lim can be a tuple containing the limits or the string "default"
+ or "range". "default" does nothing and uses matplotlib default.
+ "range" extends the current margin by 10%. This is useful since
+ the default xlim and ylim of the plots sometimes make it harder to
+ see data that is just in the margin.
+
+ """
+ if lim == "default":
+ return
+
+ if lim == "range":
+ cur_lim = get_lim()
+ lim = (cur_lim[0] - 0.1 * (cur_lim[1] - cur_lim[0]),
+ cur_lim[1] + 0.1 * (cur_lim[1] - cur_lim[0]))
+
+ set_lim(lim[0], lim[1])
+
+def set_xlim(ax, xlim):
+ """Set the xlim of the plot
+
+ See set_lim() for the details
+ """
+ set_lim(xlim, ax.get_xlim, ax.set_xlim)
+
+def set_ylim(ax, ylim):
+ """Set the ylim of the plot
+
+ See set_lim() for the details
+ """
+ set_lim(ylim, ax.get_ylim, ax.set_ylim)
+
def pre_plot_setup(width=None, height=None):
"""initialize a figure
- width and height are numbers, ylim is a tuple with min and max
- values for the y axis. This function should be called before
+ width and height are numbers This function should be called before
any calls to plot()
"""
@@ -47,10 +80,13 @@
return ax
-def post_plot_setup(ax, title="", xlabel=None, xlim=None, ylim=None):
+def post_plot_setup(ax, title="", xlabel=None, xlim="default", ylim="range"):
"""Set xlabel, title, xlim adn ylim of the plot
- This has to be called after calls to .plot()
+ This has to be called after calls to .plot(). The default ylim is
+ to extend it by 10% because matplotlib default makes it hard
+ values that are close to the margins
+
"""
if xlabel is None:
@@ -60,15 +96,8 @@
if title:
plt.title(title)
- if not ylim:
- cur_ylim = ax.get_ylim()
- ylim = (cur_ylim[0] - 0.1 * (cur_ylim[1] - cur_ylim[0]),
- cur_ylim[1] + 0.1 * (cur_ylim[1] - cur_ylim[0]))
-
- ax.set_ylim(ylim[0], ylim[1])
-
- if xlim:
- ax.set_xlim(xlim[0], xlim[1])
+ set_ylim(ax, ylim)
+ set_xlim(ax, xlim)
def plot_allfreqs(in_power, out_power, map_label, title="", width=None, height=None):
"""Do allfreqs plots similar to those of CompareRuns"""