Skip to content

Chapter 1: Bug in plotting prior & posterior probabilities due to giving lw a string as an input #560

Open
@mark-yong

Description

@mark-yong

Attempting to execute the following code in Ch 1 results in TypeError: must be real number, not str:

figsize(12.5, 4)
colours = ["#348ABD", "#A60628"]

prior = [0.20, 0.80]
posterior = [1.0 / 3, 2.0 / 3]
plt.bar(
    [0, 0.7],
    prior,
    alpha=0.70,
    width=0.25,
    color=colours[0],
    label="prior distribution",
    lw="3",
    edgecolor=colours[0],
)

Changing the code to the following where lw=3 instead of '3' fixes the problem

figsize(12.5, 4)
colours = ["#348ABD", "#A60628"]

prior = [0.20, 0.80]
posterior = [1.0 / 3, 2.0 / 3]
plt.bar(
    [0, 0.7],
    prior,
    alpha=0.70,
    width=0.25,
    color=colours[0],
    label="prior distribution",
    lw=3,
    edgecolor=colours[0],
)

Matplotlib's documentation for set_linewidth states the function only expects floats; strings this may have worked in previous versions, but the current version may have broken something

    def set_linewidth(self, w):
        """
        Set the patch linewidth in points.

        Parameters
        ----------
        w : float or None
        """

https://github.com/matplotlib/matplotlib/blob/v3.7.1/lib/matplotlib/patches.py#L384

Advise to always use numbers when setting linewidth instead of strings

Version of matplotlib: 3.7.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions