Repository: poliastro/poliastro

Issue:
OrbitPlotter.set_frame() plots nothing!
<!--- Provide a general summary of the issue in the Title above -->
While trying to solve this #316 , I wanted to reproduce the error which raised this.
🐞 **Problem**
```
j = Orbit.from_body_ephem(Jupiter)
a = plot_solar_system(outer=False)
a.plot(j, color='k')
a.set_frame(*j.pqw())
```
This gives a lots of errors like mentioned in this gist: https://gist.github.com/shreyasbapat/2a8679755bba6916c39f0522c0b958ac

<!--- Provide a detailed description of the change or addition you are proposing -->
<!--- If it is a feature or a bug, what problem is it solving-->

🖥 **Please paste the output of following commands**

`conda info -a`

`conda list`

<!--- Paste your output of this command after the colon of "Paste your output here:" -->

```
# Paste your output here:
 active environment : None
       user config file : /home/killerscope/.condarc
 populated config files : 
          conda version : 4.5.11
    conda-build version : 3.10.5
         python version : 3.6.5.final.0
       base environment : /home/killerscope/Softwares/anaconda3  (writable)
           channel URLs : https://repo.anaconda.com/pkgs/main/linux-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/free/linux-64
                          https://repo.anaconda.com/pkgs/free/noarch
                          https://repo.anaconda.com/pkgs/r/linux-64
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://repo.anaconda.com/pkgs/pro/linux-64
                          https://repo.anaconda.com/pkgs/pro/noarch
          package cache : /home/killerscope/Softwares/anaconda3/pkgs
                          /home/killerscope/.conda/pkgs
       envs directories : /home/killerscope/Softwares/anaconda3/envs
                          /home/killerscope/.conda/envs
               platform : linux-64
             user-agent : conda/4.5.11 requests/2.19.1 CPython/3.6.5 Linux/4.17.0-041700-generic ubuntu/18.04 glibc/2.27
                UID:GID : 1000:1000
             netrc file : None
           offline mode : False

# conda environments:
#
base                  *  /home/killerscope/Softwares/anaconda3

sys.version: 3.6.5 |Anaconda, Inc.| (default, Apr 29 ...
sys.prefix: /home/killerscope/Softwares/anaconda3
sys.executable: /home/killerscope/Softwares/anaconda3/bin/python
conda location: /home/killerscope/Softwares/anaconda3/lib/python3.6/site-packages/conda
conda-build: /home/killerscope/Softwares/anaconda3/bin/conda-build
conda-convert: /home/killerscope/Softwares/anaconda3/bin/conda-convert
conda-develop: /home/killerscope/Softwares/anaconda3/bin/conda-develop
conda-env: /home/killerscope/Softwares/anaconda3/bin/conda-env
conda-index: /home/killerscope/Softwares/anaconda3/bin/conda-index
conda-inspect: /home/killerscope/Softwares/anaconda3/bin/conda-inspect
conda-metapackage: /home/killerscope/Softwares/anaconda3/bin/conda-metapackage
conda-render: /home/killerscope/Softwares/anaconda3/bin/conda-render
conda-server: /home/killerscope/Softwares/anaconda3/bin/conda-server
conda-skeleton: /home/killerscope/Softwares/anaconda3/bin/conda-skeleton
conda-verify: /home/killerscope/Softwares/anaconda3/bin/conda-verify
user site dirs: ~/.local/lib/python3.6

CIO_TEST: <not set>
CONDA_ROOT: /home/killerscope/Softwares/anaconda3
DEFAULTS_PATH: /usr/share/gconf/plasma.default.path
MANDATORY_PATH: /usr/share/gconf/plasma.mandatory.path
PATH: /home/killerscope/Softwares/anaconda3/bin:/home/killerscope/Softwares/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
REQUESTS_CA_BUNDLE: <not set>
SSL_CERT_FILE: <not set>
XDG_SEAT_PATH: /org/freedesktop/DisplayManager/Seat0
XDG_SESSION_PATH: /org/freedesktop/DisplayManager/Session1
http_proxy: <set>
https_proxy: <set>


WARNING: could not import _license.show_info
# try:
# $ conda install -n root _license





conda list ->

conda list
# packages in environment at /home/killerscope/Softwares/anaconda3:
#
# Name                    Version                   Build  Channel
_ipyw_jlab_nb_ext_conf    0.1.0            py36he11e457_0  
alabaster                 0.7.10           py36h306e16b_0  
anaconda                  5.2.0                    py36_3  
anaconda-client           1.6.14                   py36_0  
anaconda-navigator        1.8.7                    py36_0  
anaconda-project          0.8.2            py36h44fb852_0  
asn1crypto                0.24.0                   py36_0  
astroid                   1.6.3                    py36_0  
astropy                   3.0.2            py36h3010b51_1  
astroquery                0.3.9.dev4961             <pip>
attrs                     18.1.0                   py36_0  
babel                     2.5.3                    py36_0  
backcall                  0.1.0                    py36_0  
backports                 1.0              py36hfa02d7e_1  
backports.shutil_get_terminal_size 1.0.0            py36hfea85ff_2  
beautifulsoup4            4.6.0            py36h49b8c8c_1  
bitarray                  0.8.1            py36h14c3975_1  
bkcharts                  0.2              py36h735825a_0  
blas                      1.0                         mkl  
blaze                     0.11.3           py36h4e06776_0  
bleach                    2.1.3                    py36_0  
blosc                     1.14.3               hdbcaa40_0  
bokeh                     0.12.16                  py36_0  
boto                      2.48.0           py36h6e4cd66_1  
bottleneck                1.2.1            py36haac1ea0_0  
bzip2                     1.0.6                h14c3975_5  
ca-certificates           2018.03.07                    0  
cairo                     1.14.12              h7636065_2  
certifi                   2018.4.16                py36_0  
cffi                      1.11.5           py36h9745a5d_0  
chardet                   3.0.4            py36h0f667ec_1  
click                     6.7              py36h5253387_0  
cloudpickle               0.5.3                    py36_0  
clyent                    1.2.2            py36h7e57e65_1  
colorama                  0.3.9            py36h489cec4_0  
conda                     4.5.11                   py36_0  
conda-build               3.10.5                   py36_0  
conda-env                 2.6.0                h36134e3_1  
conda-verify              2.0.0            py36h98955d8_0  
contextlib2               0.5.5            py36h6c84a62_0  
cryptography              2.2.2            py36h14c3975_0  
curl                      7.60.0               h84994c4_0  
cycler                    0.10.0           py36h93f1223_0  
cython                    0.28.2           py36h14c3975_0  
cytoolz                   0.9.0.1          py36h14c3975_0  
dask                      0.17.5                   py36_0  
dask-core                 0.17.5                   py36_0  
datashape                 0.5.4            py36h3ad6b5c_0  
dbus                      1.13.2               h714fa37_1  
decorator                 4.3.0                    py36_0  
distributed               1.21.8                   py36_0  
docutils                  0.14             py36hb0f60f5_0  
entrypoints               0.2.3            py36h1aec115_2  
et_xmlfile                1.0.1            py36hd6bccc3_0  
expat                     2.2.5                he0dffb1_0  
fastcache                 1.0.2            py36h14c3975_2  
filelock                  3.0.4                    py36_0  
flask                     1.0.2                    py36_1  
flask-cors                3.0.4                    py36_0  
fontconfig                2.12.6               h49f89f6_0  
freetype                  2.8                  hab7d2ae_1  
get_terminal_size         1.0.0                haa9412d_0  
gevent                    1.3.0            py36h14c3975_0  
glib                      2.56.1               h000015b_0  
glob2                     0.6              py36he249c77_0  
gmp                       6.1.2                h6c8ec71_1  
gmpy2                     2.0.8            py36hc8893dd_2  
graphite2                 1.3.11               h16798f4_2  
greenlet                  0.4.13           py36h14c3975_0  
gst-plugins-base          1.14.0               hbbd80ab_1  
gstreamer                 1.14.0               hb453b48_1  
h5py                      2.7.1            py36ha1f6525_2  
harfbuzz                  1.7.6                h5f0a787_1  
hdf5                      1.10.2               hba1933b_1  
heapdict                  1.0.0                    py36_2  
html5lib                  1.0.1            py36h2f9c1c0_0  
icu                       58.2                 h9c2bf20_1  
idna                      2.6              py36h82fb2a8_1  
imageio                   2.3.0                    py36_0  
imagesize                 1.0.0                    py36_0  
intel-openmp              2018.0.0                      8  
ipykernel                 4.8.2                    py36_0  
ipython                   6.4.0                    py36_0  
ipython_genutils          0.2.0            py36hb52b0d5_0  
ipywidgets                7.2.1                    py36_0  
isort                     4.3.4                    py36_0  
itsdangerous              0.24             py36h93cc618_1  
jbig                      2.1                  hdba287a_0  
jdcal                     1.4                      py36_0  
jedi                      0.12.0                   py36_1  
jinja2                    2.10             py36ha16c418_0  
jpeg                      9b                   h024ee3a_2  
jsonschema                2.6.0            py36h006f8b5_0  
jupyter                   1.0.0                    py36_4  
jupyter_client            5.2.3                    py36_0  
jupyter_console           5.2.0            py36he59e554_1  
jupyter_core              4.4.0            py36h7c827e3_0  
jupyterlab                0.32.1                   py36_0  
jupyterlab_launcher       0.10.5                   py36_0  
kiwisolver                1.0.1            py36h764f252_0  
lazy-object-proxy         1.3.1            py36h10fcdad_0  
libcurl                   7.60.0               h1ad7b7a_0  
libedit                   3.1.20170329         h6b74fdf_2  
libffi                    3.2.1                hd88cf55_4  
libgcc-ng                 7.2.0                hdf63c60_3  
libgfortran-ng            7.2.0                hdf63c60_3  
libpng                    1.6.34               hb9fc6fc_0  
libsodium                 1.0.16               h1bed415_0  
libssh2                   1.8.0                h9cfc8f7_4  
libstdcxx-ng              7.2.0                hdf63c60_3  
libtiff                   4.0.9                he85c1e1_1  
libtool                   2.4.6                h544aabb_3  
libxcb                    1.13                 h1bed415_1  
libxml2                   2.9.8                h26e45fe_1  
libxslt                   1.1.32               h1312cb7_0  
llvmlite                  0.23.1           py36hdbcaa40_0  
locket                    0.2.0            py36h787c0ad_1  
lxml                      4.2.1            py36h23eabaa_0  
lzo                       2.10                 h49e0be7_2  
markupsafe                1.0              py36hd9260cd_1  
matplotlib                2.2.2            py36h0e671d2_1  
mccabe                    0.6.1            py36h5ad9710_1  
mistune                   0.8.3            py36h14c3975_1  
mkl                       2018.0.2                      1  
mkl-service               1.1.2            py36h17a0993_4  
mkl_fft                   1.0.1            py36h3010b51_0  
mkl_random                1.0.1            py36h629b387_0  
more-itertools            4.1.0                    py36_0  
mpc                       1.0.3                hec55b23_5  
mpfr                      3.1.5                h11a74b3_2  
mpmath                    1.0.0            py36hfeacd6b_2  
msgpack-python            0.5.6            py36h6bb024c_0  
multipledispatch          0.5.0                    py36_0  
navigator-updater         0.2.1                    py36_0  
nbconvert                 5.3.1            py36hb41ffb7_0  
nbformat                  4.4.0            py36h31c9010_0  
ncurses                   6.1                  hf484d3e_0  
networkx                  2.1                      py36_0  
nltk                      3.3.0                    py36_0  
nose                      1.3.7            py36hcdf7029_2  
notebook                  5.5.0                    py36_0  
numba                     0.38.0           py36h637b7d7_0  
numexpr                   2.6.5            py36h7bf3b9c_0  
numpy                     1.14.3           py36hcd700cb_1  
numpy-base                1.14.3           py36h9be14a7_1  
numpydoc                  0.8.0                    py36_0  
odo                       0.5.1            py36h90ed295_0  
olefile                   0.45.1                   py36_0  
openpyxl                  2.5.3                    py36_0  
openssl                   1.0.2o               h20670df_0  
packaging                 17.1                     py36_0  
pandas                    0.23.0           py36h637b7d7_0  
pandoc                    1.19.2.1             hea2e7c5_1  
pandocfilters             1.4.2            py36ha6701b7_1  
pango                     1.41.0               hd475d92_0  
parso                     0.2.0                    py36_0  
partd                     0.3.8            py36h36fd896_0  
patchelf                  0.9                  hf79760b_2  
path.py                   11.0.1                   py36_0  
pathlib2                  2.3.2                    py36_0  
patsy                     0.5.0                    py36_0  
pcre                      8.42                 h439df22_0  
pep8                      1.7.1                    py36_0  
pexpect                   4.5.0                    py36_0  
pickleshare               0.7.4            py36h63277f8_0  
pillow                    5.1.0            py36h3deb7b8_0  
pip                       10.0.1                   py36_0  
pixman                    0.34.0               hceecf20_3  
pkginfo                   1.4.2                    py36_1  
pluggy                    0.6.0            py36hb689045_0  
ply                       3.11                     py36_0  
prompt_toolkit            1.0.15           py36h17d85b1_0  
psutil                    5.4.5            py36h14c3975_0  
ptyprocess                0.5.2            py36h69acd42_0  
py                        1.5.3                    py36_0  
pycodestyle               2.4.0                    py36_0  
pycosat                   0.6.3            py36h0a5515d_0  
pycparser                 2.18             py36hf9f622e_1  
pycrypto                  2.6.1            py36h14c3975_8  
pycurl                    7.43.0.1         py36hb7f436b_0  
pyflakes                  1.6.0            py36h7bd6a15_0  
pygments                  2.2.0            py36h0d3125c_0  
pylint                    1.8.4                    py36_0  
pyodbc                    4.0.23           py36hf484d3e_0  
pyopenssl                 18.0.0                   py36_0  
pyparsing                 2.2.0            py36hee85983_1  
pyqt                      5.9.2            py36h751905a_0  
pysocks                   1.6.8                    py36_0  
pytables                  3.4.3            py36h02b9ad4_2  
pytest                    3.5.1                    py36_0  
pytest-arraydiff          0.2                      py36_0  
pytest-astropy            0.3.0                    py36_0  
pytest-doctestplus        0.1.3                    py36_0  
pytest-openfiles          0.3.0                    py36_0  
pytest-remotedata         0.2.1                    py36_0  
python                    3.6.5                hc3d631a_2  
python-dateutil           2.7.3                    py36_0  
pytz                      2018.4                   py36_0  
pywavelets                0.5.2            py36he602eb0_0  
pyyaml                    3.12             py36hafb9ca4_1  
pyzmq                     17.0.0           py36h14c3975_0  
qt                        5.9.5                h7e424d6_0  
qtawesome                 0.4.4            py36h609ed8c_0  
qtconsole                 4.3.1            py36h8f73b5b_0  
qtpy                      1.4.1                    py36_0  
readline                  7.0                  ha6073c6_4  
requests                  2.18.4           py36he2e5f8d_1  
rope                      0.10.7           py36h147e2ec_0  
ruamel_yaml               0.15.35          py36h14c3975_1  
scikit-image              0.13.1           py36h14c3975_1  
scikit-learn              0.19.1           py36h7aa7ec6_0  
scipy                     1.1.0            py36hfc37229_0  
seaborn                   0.8.1            py36hfad7ec4_0  
send2trash                1.5.0                    py36_0  
setuptools                39.1.0                   py36_0  
simplegeneric             0.8.1                    py36_2  
singledispatch            3.4.0.3          py36h7a266c3_0  
sip                       4.19.8           py36hf484d3e_0  
six                       1.11.0           py36h372c433_1  
snappy                    1.1.7                hbae5bb6_3  
snowballstemmer           1.2.1            py36h6febd40_0  
sortedcollections         0.6.1                    py36_0  
sortedcontainers          1.5.10                   py36_0  
sphinx                    1.7.4                    py36_0  
sphinxcontrib             1.0              py36h6d0f590_1  
sphinxcontrib-websupport  1.0.1            py36hb5cb234_1  
spyder                    3.2.8                    py36_0  
sqlalchemy                1.2.7            py36h6b74fdf_0  
sqlite                    3.23.1               he433501_0  
statsmodels               0.9.0            py36h3010b51_0  
sympy                     1.1.1            py36hc6d1c1c_0  
tblib                     1.3.2            py36h34cf8b6_0  
terminado                 0.8.1                    py36_1  
testpath                  0.3.1            py36h8cadb63_0  
tk                        8.6.7                hc745277_3  
toolz                     0.9.0                    py36_0  
tornado                   5.0.2                    py36_0  
traitlets                 4.3.2            py36h674d592_0  
typing                    3.6.4                    py36_0  
unicodecsv                0.14.1           py36ha668878_0  
unixodbc                  2.3.6                h1bed415_0  
urllib3                   1.22             py36hbe7ace6_0  
wcwidth                   0.1.7            py36hdf4376a_0  
webencodings              0.5.1            py36h800622e_1  
werkzeug                  0.14.1                   py36_0  
wheel                     0.31.1                   py36_0  
widgetsnbextension        3.2.1                    py36_0  
wrapt                     1.10.11          py36h28b7045_0  
xlrd                      1.1.0            py36h1db9f0c_1  
xlsxwriter                1.0.4                    py36_0  
xlwt                      1.3.0            py36h7b00a1f_0  
xz                        5.2.4                h14c3975_4  
yaml                      0.1.7                had09818_2  
zeromq                    4.2.5                h439df22_0  
zict                      0.1.3            py36h3a3bf81_0  
zlib                      1.2.11               ha838bed_2  

```

`pip freeze | grep astropy`

`pip freeze | grep poliastro`

<!--- If this Issue is a feature request, please ignore the next command.-->
<!--- Please make sure you have installed "pytest" in your machine for this command.-->

`python -c "import poliastro.testing; poliastro.testing.test()"`

<!--- Paste your output of this command after the colon of "Paste your output here:" -->
```
# Paste your output here:
astropy==3.0.4
pytest-astropy==0.3.0

poliastro                          0.12.dev0 /home/killerscope/Local Forks/poliastro/src

```

🎯 **Goal**
<!--- Why is this change important to you? How would you use it? -->
<!--- How can it benefit other users? -->
Required for #316 
💡 **Possible solutions**
<!--- Not obligatory, but suggest an idea for implementing addition or change -->

📋  **Steps to solve the problem**

 * Comment below about what you've started working on.
 * Add, commit, push your changes
 * Submit a pull request and add this in comments - `Addresses #<put issue number here>`
 * Ask for a review in comments section of pull request
 * Celebrate your contribution to this project 🎉 


Discussion:
shreyasbapat: I forgot the tests
codecov[bot]: # [Codecov](https://codecov.io/gh/poliastro/poliastro/pull/470?src=pr&el=h1) Report
> Merging [#470](https://codecov.io/gh/poliastro/poliastro/pull/470?src=pr&el=desc) into [master](https://codecov.io/gh/poliastro/poliastro/commit/df02cbe2093649682e73b9cf2a04b2ea8a9effa8?src=pr&el=desc) will **not change** coverage.
> The diff coverage is `0%`.

[![Impacted file tree graph](https://codecov.io/gh/poliastro/poliastro/pull/470/graphs/tree.svg?width=650&token=4XOJCBTQ3o&height=150&src=pr)](https://codecov.io/gh/poliastro/poliastro/pull/470?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##           master     #470   +/-   ##
=======================================
  Coverage   85.57%   85.57%           
=======================================
  Files          49       49           
  Lines        2183     2183           
  Branches      164      164           
=======================================
  Hits         1868     1868           
  Misses        273      273           
  Partials       42       42
```


| [Impacted Files](https://codecov.io/gh/poliastro/poliastro/pull/470?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [src/poliastro/plotting.py](https://codecov.io/gh/poliastro/poliastro/pull/470/diff?src=pr&el=tree#diff-c3JjL3BvbGlhc3Ryby9wbG90dGluZy5weQ==) | `86.17% <0%> (ø)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/poliastro/poliastro/pull/470?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/poliastro/poliastro/pull/470?src=pr&el=footer). Last update [df02cbe...021dd5e](https://codecov.io/gh/poliastro/poliastro/pull/470?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

shreyasbapat: @Juanlu001 Any changes that you'd suggest?
Juanlu001: Apart from the quality issues (I'll leave the answer as an exercise to the reader) this PR needs a rebase on current master.

Patch:
diff --git a/setup.cfg b/setup.cfg
index 5f7db54f..c7616dab 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -17,5 +17,5 @@ ignore = E731,W504
 max-line-length = 120
 
 [flake8]
-ignore = E731,W504
+ignore = E731,W504,F401,F841
 max-line-length = 120
diff --git a/setup.py b/setup.py
index 4c8e22dd..f5f59150 100644
--- a/setup.py
+++ b/setup.py
@@ -27,7 +27,7 @@ setup(
     install_requires=[
         "numpy",
         "astropy>=3.0,<4.*",
-        "matplotlib>=2.0",
+        "matplotlib<3.0.1",
         "jplephem",
         "scipy",
         "beautifulsoup4>=4.5.3",
diff --git a/src/poliastro/plotting.py b/src/poliastro/plotting.py
index bc779596..703e7733 100644
--- a/src/poliastro/plotting.py
+++ b/src/poliastro/plotting.py
@@ -118,7 +118,7 @@ class OrbitPlotter(object):
     def _redraw(self):
         for artist in self.ax.lines + self.ax.collections:
             artist.remove()
-        self._attractor_radius = None
+        self._attractor = None
         for orbit, label in self._orbits:
             self.plot(orbit, label)
         self.ax.relim()


Test patch:
diff --git a/src/poliastro/tests/test_plotting.py b/src/poliastro/tests/test_plotting.py
index 61d1010f..e038a6bb 100644
--- a/src/poliastro/tests/test_plotting.py
+++ b/src/poliastro/tests/test_plotting.py
@@ -97,3 +97,9 @@ def test_dark_mode_plots_dark_plot():
     assert op.ax.get_facecolor() == (0.0, 0.0, 0.0, 1.0)
     op = OrbitPlotter()
     assert op.ax.get_facecolor() == (1.0, 1.0, 1.0, 1)
+
+
+def test_redraw_makes_attractor_none():
+    op = plot_solar_system()
+    op._redraw()
+    assert op._attractor_radius is not None