File:Solar AM0 spectrum with visible spectrum background (no).png
Summary
Description |
English: Solar AM0 (Air Mass Zero) spectrum (Chris A. Gueymard 2002) as included in SMARTS 2.95, together with a blackbody spectrum for 5777 kelvin and solid angle 2.16e-5*π steradian for the source (the solar disk). The visible region of the electromagnetic spectrum is shown using the CIE visible spectrum as implemented in ColorPy by Mark Kness (2008). Figure with Norwegian Bokmål labels. |
Date | |
Source | Own work, created using Matplotlib |
Author | Danmichaelo |
Other versions | Version with English labels |
Source |
---|
#encoding=utf8
import matplotlib
from matplotlib import rc
from matplotlib import pyplot as plt
import numpy as np
rc('lines', linewidth=0.5)
rc('font', family='sans-serif', size=10)
rc('axes', labelsize=10)
rc('xtick', labelsize=9)
rc('ytick', labelsize=9)
golden_mean = (np.sqrt(5)-1.0)/2.0
inches_per_cm = 1.0/2.54
fig_width = 8 * inches_per_cm
fig_height = golden_mean * fig_width
fig = plt.figure(figsize = [fig_width, fig_height])
from colorpy import ciexyz, colormodels
Fs = 2.16e-5 * np.pi; # Geometrical factor of sun as viewed from Earth
h = 6.63e-34; # Boltzmann const. [Js]
c = 3.e8; # speed of light [m/s]
q = 1.602e-19; # electron charge [C]
def blackbody(wvlgth, temp):
# per nanometer 1e-9:
fac = (2 * Fs * h * c**2) / ((wvlgth * 1.e-9)**5)
return fac / (np.exp(1240./(wvlgth*8.62e-5*temp)) - 1) * 1.e-9
def draw_vis_spec(ax, ymax):
spectrum = ciexyz.empty_spectrum()[:,0]
(num_wl,) = spectrum.shape
rgb_colors = np.empty((num_wl, 3))
for i in xrange (0, num_wl):
xyz = ciexyz.xyz_from_wavelength(spectrum[i])
rgb = colormodels.rgb_from_xyz(xyz)
rgb_colors [i] = rgb
rgb_colors /= np.max(rgb_colors) # scale to make brightest rgb value = 1.0
num_points = len(spectrum)
for i in xrange (0, num_points-1):
x0 = spectrum[i]
x1 = spectrum[i+1]
y0 = 0.0
y1 = ymax
poly_x = [x0, x1, x1, x0]
poly_y = [y0, y0, y1, y1]
color_string = colormodels.irgb_string_from_rgb(rgb_colors [i])
ax.fill(poly_x, poly_y, color_string, edgecolor=color_string)
ax = fig.add_subplot(111)
frame = ax.get_frame()
frame.set_facecolor('black')
xmax = 2000
ymax = 2.5
# Visible spectrum:
draw_vis_spec(ax, ymax)
# Blackbody:
temp = 5777
x = np.arange(100, 2000)
y = blackbody(x, temp)
y[-1] = 0.
ax.fill(x, y, '0.5', alpha = 0.7, linewidth = 0.9, edgecolor='yellow', label = 'Svart legeme\n%d K' % temp)
# AM0 spectrum:
d = np.loadtxt('smarts295.ext.txt', skiprows = 1)
x = d[:,0]
y = d[:,1]
y[0] = 0.
y[-1] = 0.
ax.plot(x, y, color='white', linewidth=0.5, label = 'AM0')
ax.set_xlim(0, xmax)
ax.set_xticks(np.arange(0, 1999, 300))
ax.set_ylim(0, ymax)
# Tweak, tweak and annotate:
texty = 2.25
ax.annotate('UV', xy = (50,texty), xytext = (230,texty), xycoords = 'data',
horizontalalignment='left', verticalalignment='center', color='#33bb33',
arrowprops = dict(arrowstyle='->', color='#33bb33'))
#ax.annotate('Synlig', xy=(400,texty), xycoords='data',
# horizontalalignment='left', verticalalignment='center', color='white')
ax.annotate(u'Infrarødt', xytext = (720,texty), xy = (1900,texty), xycoords = 'data',
horizontalalignment='left', verticalalignment='center', color='#33bb33',
arrowprops = dict(arrowstyle='->',color='#33bb33'))
leg = ax.legend(loc='upper right', frameon=False, bbox_to_anchor = (1.0, 0.90) )
txts = leg.get_texts()
for txt in txts:
txt.set_color('white')
txt.set_fontsize(9)
ax.tick_params(color='white', labelcolor='black')
for spine in ax.spines.values():
spine.set_edgecolor('white')
spine.set_linewidth(1.4)
fig.subplots_adjust(left=0.16, bottom = 0.19, right=0.98, top=0.96)
ax.set_xlabel(u'Bølgelengde [nm]')
ax.set_ylabel(u'Irradians [W/m$^2$/nm]')
fig.savefig('Solar AM0 spectrum with visible spectrum background (no).png',dpi=600)
|
Licensing
![]() |
I, the copyright holder of this work, release this work into the public domain. This applies worldwide. In some countries this may not be legally possible; if so: I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law. |