import matplotlib.pyplot as plt
import numpy as np
from astropy.modeling.models import Gaussian2D
from photutils.datasets import make_noise_image
from photutils.isophote import Ellipse, EllipseGeometry

g = Gaussian2D(100.0, 75, 75, 20, 12, theta=np.deg2rad(40.0))
ny = nx = 150
y, x = np.mgrid[0:ny, 0:nx]
noise = make_noise_image((ny, nx), distribution='gaussian', mean=0.0,
                         stddev=2.0, seed=1234)
data = g(x, y) + noise
geometry = EllipseGeometry(x0=75, y0=75, sma=20, eps=0.5,
                           pa=np.deg2rad(20.0))
ellipse = Ellipse(data, geometry=geometry)
isolist = ellipse.fit_image()

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2,
                                             figsize=(8, 8))
fig.subplots_adjust(hspace=0.35, wspace=0.35)

ax1.errorbar(isolist.sma, isolist.eps, yerr=isolist.ellip_err,
             fmt='o', markersize=4)
ax1.set_xlabel('Semimajor Axis Length (pix)')
ax1.set_ylabel('Ellipticity')

ax2.errorbar(isolist.sma, np.rad2deg(isolist.pa),
             yerr=np.rad2deg(isolist.pa_err), fmt='o', markersize=4)
ax2.set_xlabel('Semimajor Axis Length (pix)')
ax2.set_ylabel('PA (deg)')

ax3.errorbar(isolist.sma, isolist.x0, yerr=isolist.x0_err, fmt='o',
             markersize=4)
ax3.set_xlabel('Semimajor Axis Length (pix)')
ax3.set_ylabel('x0')

ax4.errorbar(isolist.sma, isolist.y0, yerr=isolist.y0_err, fmt='o',
             markersize=4)
ax4.set_xlabel('Semimajor Axis Length (pix)')
ax4.set_ylabel('y0')