1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
"""
=============================
Plotting a solar cycle index
=============================
This example demonstrates how to plot the solar cycle in terms of
the number of sunspots and a prediction for the next few years.
"""
import matplotlib.pyplot as plt
import astropy.units as u
from astropy.time import Time, TimeDelta
from astropy.visualization import time_support
import sunpy.timeseries as ts
from sunpy.net import Fido
from sunpy.net import attrs as a
from sunpy.time import TimeRange
###############################################################################
# The U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center (SWPC)
# provides recent solar cycle indices which includes different sunspot numbers,
# radio flux, and geomagnetic index. They also provide predictions for how the
# sunspot number and radio flux will evolve. Predicted values are based on the
# consensus of the Solar Cycle 24 Prediction Panel.
#
# We will first search for and then download the data.
time_range = TimeRange("2008-06-01 00:00", Time.now())
result = Fido.search(a.Time(time_range), a.Instrument('noaa-indices'))
f_noaa_indices = Fido.fetch(result)
result = Fido.search(a.Time(time_range.end, time_range.end + TimeDelta(4 * u.year)),
a.Instrument('noaa-predict'))
f_noaa_predict = Fido.fetch(result)
###############################################################################
# We then load them into individual `~sunpy.timeseries.TimeSeries` objects.
noaa = ts.TimeSeries(f_noaa_indices, source='noaaindices').truncate(time_range)
noaa_predict = ts.TimeSeries(f_noaa_predict, source='noaapredictindices')
###############################################################################
# Finally, we plot both ``noaa`` and ``noaa_predict`` for the sunspot number.
# In this case we use the S.I.D.C. Brussels International Sunspot Number (RI).
# The predictions provide both a high and low values, which we plot below as
# ranges.
time_support()
plt.figure()
plt.plot(noaa.time, noaa.quantity('sunspot RI'), label='Sunspot Number')
plt.plot(noaa_predict.time, noaa_predict.quantity('sunspot'),
color='grey', label='Near-term Prediction')
plt.fill_between(noaa_predict.time, noaa_predict.quantity('sunspot low'),
noaa_predict.quantity('sunspot high'), alpha=0.3, color='grey')
plt.ylim(bottom=0)
plt.ylabel('Sunspot Number')
plt.xlabel('Year')
plt.legend()
plt.show()
|