4.7
Phenology Image Generator
Seasons Theme
It was necessary to alter the operation of the WeeWX Image
Generator to draw the horizontal development-stages lines for
crop and pest Growing Degree-Day charts
(above), but
the Phenology extension does not stop at
modification. Instead it indulges in a rewrite of the WeeWX
Image Generator. The shading techniques used to produce the
horizontal development-stages lines require semi-transparent
images, so the Phenology Image Generator comes equipped to
handle image composition with backgrounds.
Further, the Phenology Image Generator uses a theme structure
to specify image options that control appearance.
The Phenology Image Generator "Seasons" theme mimics the charts
produced by the WeeWX Seasons skin. By default
the Phenology extension produces a
(mostly) complete, consistent, and coherent set of charts that
duplicate the WeeWX charts regardless of the chosen theme.
A portfolio of pre-defined themes is included in
the [[Themes]]
stanza
of $SKIN_ROOT/Phenology/phenology.conf.
The active theme is the one
called [[[Current]]]:
[Extras]
[[Themes]]
[[[Seasons]]]
themes =
[[[Current]]]
themes = Seasons
Themes may refer to one another in a cascade. Thus the Current
theme refers to the Seasons theme. Note that the Seasons theme
is an empty theme. All its image options are defaults.
Image options (if any) are specified as scalars in a theme
stanza.
The "themes" scalar may be specified in any given theme. It is
a comma-separated list of other theme names. The image options
used by the other themes are brought into the given theme —
theme by theme from right to left — before image options used by
the given theme (if any) are applied.
Here are examples of pre-defined themes.
These are all whimsical. If you're aiming for legibility and
ease of comprehension (And who doesn't?), you should stick to
the Seasons theme; nevertheless, you are invited to expend hours
of tinkering, devising your own, as I have.
Blackboard Theme
Blackboard is a reverse-video theme.
[Extras]
[[Themes]]
[[[Night]]]
image_background_color = "Black"
image_border_color = None
[[[Mist]]]
chart_background_color = "#ffffff37"
chart_border_color = None
[[[Text Gray]]]
unit_label_font_color = "#787878"
bottom_label_font_color = "#787878"
axis_label_font_color = "#787878"
[[[Shade]]]
daynight_day_color = "#00000000"
daynight_night_color = "#00001030"
daynight_edge_color = None
[[[Blackboard]]]
report_body_style = "background-color: Black; color: Gray;"
chart_gridline_color = "DimGray"
themes = Night, Mist, Shade, Text Gray
[[[Current]]]
themes = Blackboard
Yellowboard Theme
Yellowboard is a reverse-video theme, too, but with brighter
axis labels. The differences between themes can be profound or
subtle.
Greenboard Theme
Both Greenboard and Yellowboard hark back to the days when
educators used yellow chalk because they thought it resulted in
less eye fatigue than white.
4.7.1.4
Henry the Navigator
Henry the Navigator Theme
Henry the Navigator gives your Web pages a Renaissance feel.
The Woods Theme
Bound off into wild backgrounds.
Sperry 1100 Theme
I was once smitten by the beauty of the front panel on the
Sperry-Univac 1100-Series computers where console operators used
to dial in their jump keys. It was an under-appreciated piece of
industrial art whose color scheme inspired this theme.
4.7.1.7
Friden Flexowriter
Friden Flexowriter Theme
Before interior designers turned to the blues, oranges, and
mauves of the Space Age, there came the Jet Age and, before
that, the Turboprop Age. The Friden Calculator Company
manufactured a line of what can only be described as
word-processing machines with paper-tape memory. These
Flexowriters were used to streamline form-filling and
data-capture. They enlivened the battle-ship gray interiors of
military and industrial offices with their earthy hues.
Spring Theme
Experience Springtime in the Rockies. This theme combines
noon-day and dusk images from a webcam in Grand Teton National
Park in Wyoming.
This theme half-way works for day images, but don't expect too
much from it for week images.
Be aware that the Phenology Image Generator uses advanced
composition techniques. These techniques are much more
expensive in terms of computer cycles consumed than those used
by the WeeWX Image Generator. Depending on the size of the
background images supplied, you should expect to see the time
required to produce all the charts grow by an order of magnitude
or more. If you are determined to save machine cycles, you
must find other smaller images than those provided by
the Phenology extension.
4.7.2
Color Names
Opaque Curve Fill
Colors are specified
in Phenology/skin.conf according to
their X11 names that are commonly used in HTML. They may also be
given as #RRGGBBAA strings, where RR, GG, and BB are the red,
green, and blue components in hexadecimal, respectively, and AA
is the optional alpha transparency. The 0xBBGGRR notation used
in WeeWX skins continues to work, too.
Colors without an alpha channel are opaque. Suppose
"fill_curve" is true. Then the default fill colors obscure one
another.
[Extras]
[[Themes]]
[[[Current]]]
themes = Seasons
fill_curve = True
Transparent Curve Fill
But, if "chart_fill_colors" are defined to be transparent,
then they will show through one another.
[Extras]
[[Themes]]
[[[Current]]]
themes = Seasons
fill_curve = True
chart_fill_colors = "#72b2c48f", "#c472728f", ...
4.7.3
Image Options
Here is a list of image options that the Phenology Image
Generator recognizes. The defaults are the ones imposed by
the Phenology/skin.conf, not the python
script.
Name |
Type |
Default |
Description |
data_type |
ID |
None |
Normally the stanza name
specifies the variable to be plotted and is unique within
each chart. This is not true when the same variable is
plotted twice on the same chart with different
"aggregate_type"s. "Data_type" overrides the stanza name,
and, then, stanza name can be anything unique for each curve
on the same chart. |
label |
Text |
None |
If given, this is used in place
of the data_type in the chart title. |
image_width |
Pixels |
500 |
This is the width of a chart. |
image_height |
Pixels |
180 |
This is the height of a chart. |
image_background_color |
Color |
White |
This is the color of of the
background around the chart. |
image_background_pattern |
Image |
None |
This is the background image, which
is drawn over the "image_background_color." |
image_border |
Pixels |
2 |
This is the thickness of the
image border. |
image_border_color |
Color |
None |
This is the color of the image border. |
chart_background_color |
Color |
White |
This is the color of of the
background inside the chart axes. |
chart_background_pattern |
Image |
None |
This is the background image, which
is drawn over the "chart_background_color." |
chart_border |
Pixels |
2 |
This is the thickness of the
chart border. |
chart_border_color |
Color |
None |
This is the color of the chart border. |
chart_gridline_color |
Color |
#d0d0d0 |
This is the color of the gridlines. |
anti_alias |
Integer |
1 |
This magnification factor is
applied to the chart dimensions. You can easily double the
size of the chart by specifying an "anti_alias" of 2. |
top_label_font_path |
Font |
font/OpenSans-Bold.ttf |
This is the font used to display
the titles of the curves on the chart. |
top_label_font_size |
Points |
14 |
This is the size of the text in
the top label. |
unit_label_font_path |
Font |
font/OpenSans-Bold.ttf |
This is the font used to display
the y-axis label. |
unit_label_font_size |
Points |
12 |
This is the size of the text in
the y-axis label. |
unit_label_font_color |
Color |
#787878 |
This is the color of the y-axis label. |
axis_label_font_path |
Font |
font/OpenSans-Regular.ttf |
This is the font used to display
the tic labels. |
axis_label_font_size |
Points |
10 |
This is the size of the text in
the tic labels. |
axis_label_font_color |
Color |
#787878 |
This is the color of the tic labels. |
bottom_label_font_path |
Font |
font/OpenSans-Regular.ttf |
This is the font used to display
the date text at the bottom of each chart. |
bottom_label_font_size |
Points |
12 |
This is size of text in the bottom label. |
bottom_label_font_color |
Color |
"#787878 |
This is color of the text in the bottom label. |
bottom_label_offset |
Pixels |
3 |
This is the vertical offset of
the bottom label down away from the axis labels. |
bottom_label_format |
strftime |
%x %X |
This is the date format used to
print the generation date at the bottom of each chart. |
rose_mask |
Image |
icons/North_Pointer.png |
This is the compass rose used on
wind vector charts. |
rose_color |
Color |
#fc402077 |
This is the the semi-transparent
color of the compass rose on wind vector charts. |
vector_rotate |
Deg |
90 |
This is the angle of North on
the wind vector charts. |
horizon_label_font_path |
Font |
font/OpenSans-Bold.ttf |
This is the font used to label
the development horizons. |
horizon_label_font_size |
Points |
12 |
This is the size of the text on
development horizons. |
horizon_label_font_color |
Color |
DarkRed |
This is the color of the text on
development horizons. |
horizon_label_padding |
Pixels |
1 |
This is the vertical offset of
the development horizon label from the horizon line. |
horizon_shading |
Pixels |
15 |
This is the vertical width of
the shading gradient under the development horizon. |
horizon_shading_color |
Color |
#ffbbbb77 |
This is the color of the shading
gradient under the development horizon. |
horizon_edge_color |
Color |
Red |
This is the color of the
development horizon line. |
color |
Color |
None |
This is the color used to draw a
curve line on a chart. |
chart_line_colors |
Color |
Tuple |
These are the colors used to
draw curves. These colors are also used to color-code the
name of each curve in the chart title. "Color" applies to
all curves. "Chart_line_colors" has multiple values for the
separate curves. "Color" takes precedence. |
fill_color |
Color |
None |
This is the color used to fill
bar charts and optionally line charts. |
chart_fill_colors |
Color |
Tuple |
These are the colors used to
fill curves and bar plots. "Fill_color" applies to all
curves. "Chart_fill_colors" has multiple values for the
separate curves. "Fill_color" takes precedence. |
chart_fill_pattern |
Image |
None |
This is an image, which
is drawn over the "fill_color." |
marker_size |
Pixels |
8 |
This is the size of plot
markers. |
marker_type |
Ordinal |
None |
This is the shape of the marker
used at each data point along a curve. It may be "cross,"
"x," "circle," "box," or "None." |
width |
Pixels |
1 |
This is the thickness of a curve
on the chart. If it is greater than one, the curve line is
dilated with a 3x3 kernel. |
chart_line_width |
Pixels |
1, 1, 1 |
This is the thickness in pixels
of curves on the chart. "Width" applies to all curves.
"Chart_line_width" has multiple values for the separate
curves. "Width" takes precedence. |
line_gap_fraction |
Ratio |
0.03 |
Larger gaps between data points
in proportion to the nominal length of the x-axis are not
plotted. |
show_daynight |
Boolean |
True |
This determines whether
day/night phases are illustrated in the chart. |
daynight_day_color |
Color |
#fdfaff |
This is color of the day phase
of a chart with "show_daynight" before the
"daynight_day_pattern" is applied. |
daynight_night_color |
Color |
#dfdfe2 |
This is color of the night phase
of a chart with "show_daynight" before the
"daynight_night_pattern" is applied. |
daynight_edge_color |
Color |
#e0d8d8 |
This is the color of a vertical
line drawn on the day/night boundary. |
daynight_day_pattern |
Image |
None |
This is the background pattern
for the day phase of a chart with "show_daynight." It is
drawn over the "daynight_day_color." |
daynight_night_pattern |
Image |
None |
This is the background pattern
for the night phase of a chart with "show_daynight." It is
drawn over the "daynight_night_color." |
plot_type |
Ordinal |
line |
The Image Generator produces
three kinds of plots (charts): "line," "bar," and "vector." |
line_type |
Ordinal |
solid |
Normally the Image Generator
tries to plot chart curves as "solid" lines. The
wind-direction charts are exceptions. They have line_type
of "None." |
fill_curve |
Boolean |
False |
Normally the Image Generator
does not fill the area below a curve, whereas plot_type
"bar" charts are always filled. |
aggregate_type |
Ordinal |
None |
This tells how to aggregate
readings for longer time scales. It may be "avg," "sum," or
"max." |
aggregate_interval |
Seconds |
None |
This determines the period over
which readings are aggregated for longer time scales. |
time_length |
Seconds |
86400 (24 hrs) |
This is the nominal width of the x-axis of a chart. |
report_body_style |
Style |
None |
All of the Cheetah templates
that the Phenology extension
provides attach the value of this option to the HTML
<body> so that the style of the Web pages and the
colors of the charts that appear on them can be
coordinated. |
x_interval |
Seconds |
None |
This is the time spacing between
tics on the x-axis. |
x_label_format |
strftime |
None |
This is the date format used to
label the x-axis tics. |
x_label_spacing |
Integer |
2 |
This tells how many unlabeled
tics are skipped between labeled ones along the x-axis. If
x_label_spacing is 2, every other tic is skipped. |
yscale |
Tuple |
None, None, None |
This is three numbers: The low
limit of the y-axis, the high limit, and the interval
between tics. |
y_nticks |
Integer |
10 |
This is the user-recommended
number of ticks along the y-axis. |
y_label_side |
Ordinal |
Left |
This determines whether the
y_axis is labeled on the left side, right side, or both
sides of the chart. |
y_label |
Text |
None |
This is the units label for the
y-axis. |
y_label_format |
printf |
None |
This is the format of the
numbers used to label the y-axis tics. |
y_label_spacing |
Integer |
2 |
This tells how many unlabeled
tics are skipped between labeled ones along the y-axis. If
y_label_spacing is 2, every other tic is skipped. |
|