Branding¶
xWRF’s minimalistic logo was inspired by destaggering and handling of WRF’s C-grid, which are key features of xWRF. It was also generated in Python using matplotlib, as shown below!
from matplotlib.patches import BoxStyle, FancyBboxPatch, Polygon
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
%config InlineBackend.figure_format='retina'
# Options
gap_width = 0.135
color = {"bg_light": "k", "bg_dark": "w"}
tick_color = "grey"
tick_width = gap_width
tick_height = tick_width / 8
font_options = {
"fontfamily": "Source Code Pro",
"fontweight": "semibold",
"fontsize": 200,
"ha": "center",
"va": "center_baseline",
}
letter_y_shift = 0.038
def generate_xwrf_logo(ax, bg_type="bg_light"):
"""Create xwrf logo using provided Axes and specified color pattern."""
# Define the "X" triangles
gap_side = gap_width / np.sqrt(2)
tri_left = np.array([[-0.5, 0.5 - gap_side], [-gap_side, 0], [-0.5, -0.5 + gap_side]])
tri_right = tri_left * np.array([[-1, 1]])
tri_bottom = tri_left[:, ::-1]
tri_top = tri_right[:, ::-1]
for tri in (tri_left, tri_right, tri_top, tri_bottom):
ax.add_patch(Polygon(tri, facecolor=color[bg_type], edgecolor=None))
# Letters
local_font_options = {**font_options, "c": color[bg_type]}
for i, letter in enumerate("WRF", start=1):
ax.text(i, letter_y_shift, letter, fontdict=local_font_options)
# u ticks and v ticks
for u_pos in np.arange(-0.5, 4, 1.0):
ax.add_patch(
FancyBboxPatch(
(-tick_width / 2 + u_pos, -tick_height),
tick_width,
tick_height,
boxstyle=BoxStyle("Round", pad=tick_height / 4),
facecolor=tick_color,
edgecolor=tick_color,
)
)
for v_pos in np.arange(0, 4, 1.0):
for y_offset in (-0.5, 0.5):
ax.add_patch(
FancyBboxPatch(
(-tick_height / 2 + v_pos, -tick_width / 2 + y_offset),
tick_height,
tick_width,
boxstyle=BoxStyle("Round", pad=tick_height / 4),
facecolor=tick_color,
edgecolor=tick_color,
)
)
# Bounding
ax.set_xlim(-0.6, 3.6)
ax.set_ylim(-0.6, 0.6)
ax.axis("off")
ax.set_aspect("equal")
# Generate static SVG files
for bg_type in color:
fig, ax = plt.subplots(figsize=(16, 4))
generate_xwrf_logo(ax, bg_type)
fig.savefig(f"xwrf_logo_{bg_type}.svg", bbox_inches="tight", transparent=True)