pro mg_sparkline, filename, data, xsize=xsize, ysize=ysize, yrange=yrange, $
color=color, background=background, $
endpoint_color=endpoint_color, $
band_range=band_range, band_color=band_color
compile_opt strictarr
on_error, 2
my_xsize = n_elements(xsize) eq 0 $
? long(1.5 * n_elements(data)) $
: long(xsize)
my_ysize = n_elements(ysize) eq 0 ? 12L : long(ysize)
multiplier = 10L
max_data = max(data, min=min_data)
my_yrange = n_elements(yrange) eq 0 ? [min_data, max_data] : yrange
n_data = n_elements(Data)
odest = obj_new('IDLgrBuffer', dimensions=[my_xsize, my_ysize] * multiplier)
oview = obj_new('IDLgrView', color=background, $
viewplane_rect=[0, my_yrange[0], $
n_data - 1L, my_yrange[1] - my_yrange[0]])
omodel = obj_new('IDLgrModel')
oview->add, omodel
oplot = obj_new('IDLgrPlot', data, color=color, thick=multiplier)
omodel->add, oplot
if (n_elements(band_range) gt 0 || n_elements(band_color) gt 0) then begin
if (n_elements(band_range) eq 0) then begin
my_band_range = $
[min_data + (max_data - min_data) / 4.0, $
max_data - (max_data - min_data) / 4.0]
endif else my_band_range = band_range
my_band_color = n_elements(band_color) eq 0 $
? bytarr(3) + 200B $
: band_color
oband = obj_new('IDLgrPolygon', $
[0, n_data - 1L, n_data - 1L, 0L, 0L], $
my_band_range[[0, 0, 1, 1, 0]], $
color=my_band_color)
omodel->add, oband
end
odest->draw, oview
oimage = odest->read()
oimage->getProperty, data=image
obj_destroy, [oview, odest, oimage]
if (n_elements(endpoint_color) gt 0) then begin
end_x = my_xsize - 1L
end_y = (data[n_data - 1L] - my_yrange[0]) $
* (my_ysize - 1L) / (my_yrange[1] - my_yrange[0])
endif
if (n_elements(background) eq 0) then begin
final_image = bytarr(4, my_xsize, my_ysize)
for b = 0, 2 do begin
final_Image[b, *, *] = congrid(reform(image[b, *, *]), $
my_xsize, my_ysize, $
/center, /interp, /minus_one) $
> 0B <
endfor
alpha = bytarr(my_xsize * multiplier, my_ysize * multiplier) + 255B
ind = where(image[0, *, *] eq 255B and $
image[1, *, *] eq 255B and $
image[1, *, *] eq 255B, count)
if (count gt 0) then alpha[ind] = 0B
final_image[3, *, *] = congrid(alpha, my_xsize, my_ysize, $
/center, /interp, /minus_one) > 0B <
if (n_elements(endpoint_color) gt 0) then begin
final_image[*, end_x, end_y] = [endpoint_color, 255B]
final_image[*, end_x - 1L, end_y] = [endpoint_color, 255B]
endif
endif else begin
final_image = congrid(image, 3, my_xsize, my_ysize, $
/center, /interp, /minus_one) > 0B <
if (n_elements(endpoint_color) gt 0) then begin
final_image[*, end_x, end_y] = endpoint_color
final_image[*, end_x - 1L, end_y] = endpoint_color
endif
endelse
write_png, filename, final_image
end