diff --git a/.travis.yml b/.travis.yml
index 712fc84..7ca7e6a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,4 +11,4 @@ install:
script:
- flake8 . --show-source --statistics
- - docker run baselines-test pytest -v .
+ - docker run baselines-test pytest -v --forked .
diff --git a/baselines/common/plot_util.py b/baselines/common/plot_util.py
index 6f4c272..1d105c8 100644
--- a/baselines/common/plot_util.py
+++ b/baselines/common/plot_util.py
@@ -240,6 +240,8 @@ def plot_results(
split_fn=default_split_fn,
group_fn=default_split_fn,
average_group=False,
+ shaded_std=True,
+ shaded_err=True,
figsize=None,
legend_outside=False,
resample=0,
@@ -261,9 +263,15 @@ def plot_results(
Curves in the same group have the same color (if average_group is False), or averaged over
(if average_group is True). The default value is the same as default value for split_fn
- average_group: bool - if True, will average the curves in the same group. The mean of the result is plotted, with lighter
- shaded region around corresponding to the standard deviation, and darker shaded region corresponding to
- the error of mean estimate (that is, standard deviation over square root of number of samples)
+ average_group: bool - if True, will average the curves in the same group and plot the mean. Enables resampling
+ (if resample = 0, will use 512 steps)
+
+ shaded_std: bool - if True (default), the shaded region corresponding to standard deviation of the group of curves will be
+ shown (only applicable if average_group = True)
+
+ shaded_err: bool - if True (default), the shaded region corresponding to error in mean estimate of the group of curves
+ (that is, standard deviation divided by square root of number of curves) will be
+ shown (only applicable if average_group = True)
figsize: tuple or None - size of the resulting figure (including sub-panels). By default, width is 6 and height is 6 times number of
sub-panels.
@@ -346,8 +354,10 @@ def plot_results(
ystderr = ystd / np.sqrt(len(ys))
l, = axarr[isplit][0].plot(usex, ymean, color=color)
g2l[group] = l
- ax.fill_between(usex, ymean - ystderr, ymean + ystderr, color=color, alpha=.4)
- ax.fill_between(usex, ymean - ystd, ymean + ystd, color=color, alpha=.2)
+ if shaded_err:
+ ax.fill_between(usex, ymean - ystderr, ymean + ystderr, color=color, alpha=.4)
+ if shaded_std:
+ ax.fill_between(usex, ymean - ystd, ymean + ystd, color=color, alpha=.2)
# https://matplotlib.org/users/legend_guide.html
diff --git a/docs/viz/viz.md b/docs/viz/viz.md
index d54ca37..8d65816 100644
--- a/docs/viz/viz.md
+++ b/docs/viz/viz.md
@@ -27,9 +27,8 @@ And you can now start TensorBoard with:
tensorboard --logdir=$OPENAI_LOGDIR
```
-## Loading summaries of the results
+## Loading summaries of the results ([notebook](https://colab.research.google.com/drive/1Wez1SA9PmNkCoYc8Fvl53bhU3F8OffGm))
If the summary overview provided by tensorboard is not sufficient, and you would like to either access to raw environment episode data, or use complex post-processing notavailable in tensorboard, you can load results into python as [pandas](https://pandas.pydata.org/) dataframes.
-The colab notebook with the full version of the code is available [here](https://colab.research.google.com/drive/1Wez1SA9PmNkCoYc8Fvl53bhU3F8OffGm) (use "Open in playground" button to get a runnable version)
For instance, the following snippet:
```python
@@ -106,12 +105,32 @@ The results are split into two groups based on batch size and are plotted on a s
Showing all seeds on the same plot may be somewhat hard to comprehend and analyse. We can instead average over all seeds via the following command:
+
The lighter shade shows the standard deviation of data, and darker shade -
-error in estimate of the mean (that is, standard deviation divided by square root of number of seeds)
+error in estimate of the mean (that is, standard deviation divided by square root of number of seeds).
Note that averaging over seeds requires resampling to a common grid, which, in turn, requires smoothing
(using language of signal processing, we need to do low-pass filtering before resampling to avoid aliasing effects).
You can change the amount of smoothing by adjusting `resample` and `smooth_step` arguments to achieve desired smoothing effect
See the docstring of `plot_util` function for more info.
+To plot both groups on the same graph, we can use the following:
+```python
+pu.plot_results(results, average_group=True, split_fn=lambda _: '')
+```
+Option `split_fn=labmda _:'' ` effectively disables splitting, so that all curves end up on the same panel.
+
+
+
+Now, with many groups the overlapping shaded regions may start looking messy. We can disable either
+light shaded region (corresponding to standard deviation of the curves in the group) or darker shaded region
+(corresponding to the error in mean estimate) by using `shaded_std=False` or `shaded_err=False` options respectively.
+For instance,
+
+```python
+pu.plot_results(results, average_group=True, split_fn=lambda _: '', shaded_std=False)
+```
+produces the following plot:
+
+
diff --git a/setup.py b/setup.py
index f77faf0..2e5e36a 100644
--- a/setup.py
+++ b/setup.py
@@ -11,6 +11,7 @@ extras = {
'test': [
'filelock',
'pytest',
+ 'pytest-forked',
'atari-py'
],
'bullet': [