使用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函数的参数即可完成华夫饼图的定制。
在这里插入图片描述

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:设置图标图例。

在这里插入图片描述

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()
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值