0

I have successfully created a bar chart using Python and Matplotlib. I have managed to give the bars a background color and the values a color. I have also managed to x and y tick labels color (category labels color).

The next thing I want to do are the following four changes:

  • Set color of the "top" and "right" to blank
  • Set color of the "bottom" (x-axis) and "left" (y-axis) to grey

What I have: enter image description here

What I am trying to create: enter image description here

Code:

#
# File: bar.py
# Version 1
# License: https://opensource.org/licenses/GPL-3.0 GNU Public License
#

import matplotlib

import matplotlib.pyplot as plt


def bar(category_labels: list = ["A", "B", "C", "D"],
        category_labels_color: str = "grey",
        data: list = [3, 8, 1, 10],
        bar_background_color: str = "red",
        bar_text_color: str = "white",
        direction: str = "vertical",
        x_labels_rotation: int = 0,
        figsize: tuple = (18, 5),
        file_path: str = ".",
        file_name: str = "bar.png"):
    """
    Documentation: https://matplotlib.org/stable/gallery/lines_bars_and_markers/bar_label_demo.html
    """

    # Debugging
    print(f"bar() :: data={data}")
    print(f"bar() :: category_labels={category_labels}")
    print(f"bar() :: bar_background_color={bar_background_color}")
    print(f"bar() :: bar_text_color={bar_text_color}")

    # Use agg
    matplotlib.use('Agg')

    # Draw bar
    fig, ax = plt.subplots(figsize=figsize)
    if direction == "vertical":
        bars = ax.bar(category_labels, data, color=bar_background_color)

    else:
        bars = ax.barh(category_labels, data, color=bar_background_color)

    # Add labels to bar
    ax.bar_label(bars, label_type='center', color=bar_text_color)


    # X and Y labels color + rotation
    plt.setp(ax.get_xticklabels(), fontsize=10, rotation=x_labels_rotation, color=category_labels_color)
    plt.setp(ax.get_yticklabels(), fontsize=10, color=category_labels_color)

    # Set grid color
    plt.rcParams.update({"axes.grid": False, "grid.color": "#cccccc"})

    # Two  lines to make our compiler able to draw:
    plt.savefig(f"{file_path}/{file_name}", bbox_inches='tight', dpi=200)
    fig.clear()


if __name__ == '__main__':
    category_labels = ['Dec 2022', 'Jan 2023', 'Feb 2023']
    data = [34, 58, 7]
    bar_background_color= "#4f0176"
    bar_text_color = "white"
    category_labels_color = "grey"

    bar(category_labels=category_labels,
        data=data,
        bar_background_color=bar_background_color,
        bar_text_color=bar_text_color,
        category_labels_color=category_labels_color,
        file_path=f".",
        file_name="bar.png")
Europa
  • 974
  • 12
  • 40
  • 2
    This is the answer what you are looking for: https://stackoverflow.com/questions/1982770/matplotlib-changing-the-color-of-an-axis – Manvi Feb 20 '23 at 09:47
  • Also interesting: `ax.spines['bottom'].set_visible(False)` – JohanC Feb 20 '23 at 16:55

0 Answers0