def lines(
    *,
    base_width=0.5,
    line_base_ratio=2.0,
    tick_major_base_ratio=1.0,
    tick_minor_base_ratio=0.5,
    tick_size_width_ratio=3.0,
    tick_major_size_min=3.0,
    tick_minor_size_min=2.0,
    axisbelow=True,
):
    """Adjust linewidth(s) according to a base width."""

    tick_major_width = tick_major_base_ratio * base_width
    tick_minor_width = tick_minor_base_ratio * base_width
    tick_major_size = max(tick_major_size_min, tick_size_width_ratio * tick_major_width)
    tick_minor_size = max(tick_minor_size_min, tick_size_width_ratio * tick_minor_width)
    return {
        # Set the line-widths appropriately (including the grid)
        "axes.linewidth": base_width,
        "lines.linewidth": line_base_ratio * base_width,
        "xtick.major.width": tick_major_width,
        "ytick.major.width": tick_major_width,
        "xtick.minor.width": tick_minor_width,
        "ytick.minor.width": tick_minor_width,
        "xtick.major.size": tick_major_size,
        "ytick.major.size": tick_major_size,
        "xtick.minor.size": tick_minor_size,
        "ytick.minor.size": tick_minor_size,
        "grid.linewidth": base_width,
        # Legend frame linewidth
        "patch.linewidth": base_width,
        "legend.edgecolor": "inherit",  # inherit color from axes. passing 'color' leads to awkward future warnings.
        # Control the zorder of the ticks and gridlines
        # This is somewhat out of place in this function, but creating a new function
        # seems a bit unnecessary here... suggestions welcome!
        "axes.axisbelow": axisbelow,
    }