%pylab inline
with open('data/hygfull.csv') as f:
print f.read(440) + '...'
import csv
with open('data/hygfull.csv') as f:
stars = list(csv.DictReader(f))
stars[123]
tau = 2.0 * pi
from spectral_classification import build_color_chart
color_chart = build_color_chart('starcolors.txt')
def paren(spectral_class):
letter = spectral_class[:2]
roman = spectral_class[2:] or 'V'
return '{}({})'.format(letter, roman)
print paren('G8III')
print paren('B9')
stars2 = [
star for star in stars
if star['ColorIndex'] and
paren(star['Spectrum']) in color_chart
]
print len(stars2), 'of', len(stars), 'have good colors'
star_magnitudes = array(
[ float(star['AbsMag']) for star in stars2 ])
star_colors = array(
[ float(star['ColorIndex']) for star in stars2 ])
star_spectra = array(
[ star['Spectrum'] for star in stars2 ])
print star_magnitudes[:5]
print star_colors[:5]
print star_spectra[:5]
hr_axes = [-0.5, 2, 15, -5]
scatter(star_colors, star_magnitudes, s=1,
c=(0, 0, 0), linewidths=0)
axis(hr_axes)
star_rgbs = [
color_chart[paren(spectral_class)]
for spectral_class in star_spectra
]
scatter(star_colors, star_magnitudes, s=1,
c=star_rgbs, linewidths=0.0)
axis(hr_axes)
hr_range = [[-5, 15], [-0.5, 2]]
heatmap, yedges, xedges = histogram2d(
star_magnitudes, star_colors, bins=50,
range=hr_range)
extent = [xedges[0], xedges[-1], yedges[-1], yedges[0]]
imshow(heatmap, aspect=0.08, extent=extent)
heatmap[10][10]
from matplotlib.cm import get_cmap
imshow(heatmap, cmap=get_cmap('gray'),
aspect=0.08, extent=extent)
What if we want some color?
colorgrid = zeros((50, 50, 3))
ymin, ymax, xmin, xmax = -5, 15, -0.5, 2
y_range = ymax - ymin
x_range = xmax - xmin
for i in range(len(stars2)):
xbin = 50.0 * (star_colors[i] - xmin) / x_range
ybin = 50.0 * (star_magnitudes[i] - ymin) / y_range
if not 0.0 <= xbin < 50.0:
continue
if not 0.0 <= ybin < 50.0:
continue
xbin = int(xbin)
ybin = int(ybin)
color = color_chart[paren(star_spectra[i])]
colorgrid[ybin][xbin] += color
print heatmap[10][10]
print colorgrid[25][20:25]
colorgrid /= colorgrid.max()
print colorgrid[25][20:25]
imshow(colorgrid, aspect=0.08, extent=extent)
x = linspace(0.0, 1.2, 100)
plot(x, x ** 2)
plot(x, x)
plot(x, x ** 0.5)
axes().set_aspect(1.0)
plot = plt.figure().add_subplot(111)
plot.imshow(colorgrid ** 0.5, aspect=0.08,
extent=extent)