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()