使用matplotlib和pywaffle绘制象形图(PictorialBar)

概述

matplotlib没有提供原生的象形图接口。通过第三方库pywaffle可以生成简易象形图。

pywaffle是一个用于绘制华夫饼图的第三方库,支持使用Font Awesome作为自定义图形。
文档见https://pywaffle.readthedocs.io/en/latest/

安装

$ pip install pywaffle

简易应用:华夫饼图

pywaffle的应用非常简单。首先将Waffle类传递给matplotlib.pyplot.figure函数的FigureClass参数,然后通过设置matplotlib.pyplot.figure函数的参数即可完成华夫饼图的定制。
使用matplotlib和pywaffle绘制象形图(PictorialBar)_第1张图片

import matplotlib.pyplot as plt
from pywaffle import Waffle
plt.figure(
    FigureClass=Waffle,
    rows=5,
    columns=10,  # Either rows or columns could be omitted
    values=[30, 16, 4]
)
plt.show()

实现象形图

由于华夫饼图和象形图之间是有一定差别的,需要设置一些关键参数。

  • icons:设置各类别使用的图标。取值为Font Awesome的图标名称,名称定义见pywaffle.fontawesome_mapping.icons。类型为字符串或字符串列表。
  • columns:设置图标的最大列数,需要同时设置vertical=True
  • starting_location:设置类别的起始位置。 starting_location='NW'即从左上角开始排列。
  • block_arranging_style = 'new-line':设置每个类别新起一行。
  • icon_legend:设置图标图例。

使用matplotlib和pywaffle绘制象形图(PictorialBar)_第2张图片

import numpy as np
import matplotlib.pyplot as plt
from pywaffle import Waffle

# 设置中文字体
plt.rcParams["font.family"] = "simhei"
# 构造数据
data = np.array([150, 115, 100])
# 构造图例标签
labels = ["晴", "小雨", "多云"]
# 构造最大列数
columns = 15
plt.figure(
    FigureClass=Waffle,
    # 构造列数
    columns=columns,
    # 设置类别图标
    icons=["sun", "cloud-rain", "cloud"],
    # 设置类别颜色
    colors=["#FFA500", "#4384FF", "#C0C0C0"],
    # 垂直排列分类
    vertical=True,
    # 从左上角开始排列
    starting_location="NW",
    # 设置每个分类另起一行
    block_arranging_style="new-line",
    # 设置图标间隙
    interval_ratio_x=1.5,
    interval_ratio_y=1.5,
    # 值缩放处理
    values=data * columns / data.max(),
    # 设置标题
    title={
     
        "label": "天气指数",
        "loc": "left",
        "fontdict": {
     
            "fontsize": 20,
        },
        "pad": 20,
    },
    # 设置图例标签
    labels=[f"{k} ({v}天)" for k, v in zip(labels, data)],
    # 设置图例位置、排列方式
    legend={
     
        "loc": "lower left",
        "bbox_to_anchor": (0, -0.4),
        "ncol": len(data),
        "framealpha": 0,
        "fontsize": 16,
    },
    # 设置图标图例
    icon_legend=True,
    # 设置图像大小
    figsize=(13, 5),
)

plt.show()

你可能感兴趣的:(Matplotlib,matplotlib,pywaffle,华夫饼图,象形图,PictorialBar)