Это 6-й день моего участия в августовском испытании обновлений.Подробности о мероприятии:Испытание августовского обновления
Всем привет, меня зовут Кай.
Вафельная диаграмма или прямоугольная круговая диаграмма может визуально отображать процент завершения. По сравнению с традиционной круговой диаграммой вафельная диаграмма более четко и точно отображает процентное соотношение, а каждая ее ячейка представляет 1%. Типичное применение вафельной диаграммы — сравнение коэффициента завершения индикаторов одного типа. Например, завершение работы, годовой доход и т. д.
1. Excel, чтобы нарисовать вафельную диаграмму
На самом деле существует много способов нарисовать вафельную диаграмму в excel, более сложный — настроить параметры гистограммы после вставки диаграммы гистограммы, другая относительно простая операция — взять单元格格式
Это также программа, которую мы собираемся представить сегодня.
1.1 Предварительный просмотр эффекта
1.2. Этапы реализации
сначала выберите10*10
Всего 100 интервалов ячеек, а затемпиксели ширины и высоты установлены равными, здесь мы устанавливаем значение 25 пикселей
Тогда мы в клетке изслева -> справа,вниз -> вверхзаполнить цифры1-100
Чтобы отобразить значение прогресса, мы вводим значение внизу (здесь в качестве примера используется 66%), а затем выбираем цифровую область 10 * 10 для条件格式
Настройки ->图标集
—>形状
Наконец, снова введите параметры условного форматирования и выберите правила управления, чтобы установить подробные правила.Нажмите «Изменить правило».Или дважды щелкните конкретное правило напрямую
Конкретные правила заключаются в следующем:
- Формула выбора типа
- Если значение ячейки превышает указанное значение (здесь ячейка C13 66% * 100), оно будет выделено серым цветом.
- Если значение ячейки не превышает указанного значения, оно будет оранжево-красным
- При этом не забудьте поставить галочку только на отображение значков (иначе будет случай, когда номера сот будут отображать наложенные значки)
После определения правил мы видим, что эффект выглядит следующим образом, и мы закончили с простой оптимизацией (например, удалением сеток и добавлением других элементов).
2. Python рисует вафельную диаграмму
Здесь представлена сторонняя библиотекаpywaffle
, глядя на название этой библиотеки, вы понимаете, что этот продукт специально используется для рисования вафельных диаграмм.
Старые правила, сначала установите, а потом пользуйтесь:
pip install pywaffle
Затем идет простой процесс рисования:
import matplotlib.pyplot as plt
from pywaffle import Waffle
# 设置中文字体
plt.rcParams["font.family"] = "Microsoft YaHei"
# 进度值
value = 0.66
values = [value,1-value]
fig = plt.figure(
FigureClass=Waffle,
rows=10, # 10行
columns=10, # 10列
values=values, # 值
colors=["#FF4500", "#C0C0C0"], # 配色
vertical=True, # 设置绘图方向从下往上、从左往右
characters='●', # 用实心圆做图标
font_size=45, # 大小为45
title={
'label': '工作完成度', # 设置图表标题
'loc': 'center',
'y':1.05,
'fontdict': {
'fontsize': 20
}
},
)
fig.text( # 设置进度值显示
x=0.3,
y=-0.03,
s=f"{int(100*value)}%",
ha="center",
va="center",
fontsize=25,
color='orangered', # 橙红色
)
Вывод сюжета выглядит следующим образом:
3. Введение в вафельную диаграмму pywaffle
Так как функция представляет собой вафельную диаграмму, содержание не сложное, и можно напрямую обратиться к официальной документации (доступны и функции, и кейсы, и они относительно просты).
# 官网地址
https://pywaffle.readthedocs.io/
Вафельная диаграмма,Также известен какSquare Pie Chart
, представляет собой вариант круговой диаграммы, хорошо отображающийДоля частей в целом. Вообще говоря, вафельная диаграмма состоит из 100 сеток, и одна сетка представляет1%
. Используйте сетки разных цветов, чтобы различать разные категориальные данные, чтобы показать долю каждой части в целом.
3.1 Базовый случай
вводитьmatplotlib
иpywaffle
, указанный при построении графикаFigureClass=Waffle
Просто
import matplotlib.pyplot as plt
from pywaffle import Waffle
plt.figure(
FigureClass=Waffle,
rows=5, # 行数
columns=10, # 列数
values=[30, 16, 4] # 值(三类值,这里总和=50和格子总数相等,则行列可以只指定一个即可)
)
plt.show()
параметрvalues
Также принимает данные в словаре, ключи словаря будут использоваться как метки и отображаться в легенде
fig = plt.figure(
FigureClass=Waffle,
rows=5,
columns=10,
values={'Cat1': 30, 'Cat2': 16, 'Cat3': 4},
legend={ # 图例
'loc': 'upper left', # 图例位置
'bbox_to_anchor': (1, 1) # 图例位置坐标
}
)
3.2 Численное масштабирование
Когда общее количество сеток и сумма чисел в значениях не равны, установите параметрrounding_rule
Значение может указывать правила масштабирования.
когда
rounding_rule
даceil
или когдаnearest
, сумма значений масштабирования может быть больше, чем общее количество ячеек. В этом случае сетка последней категории не будет отображаться полностью. Поэтому, хотяnearest
правило округления по умолчанию, ноfloor
На самом деле это наиболее последовательное правило, поскольку оно позволяет избежать переполнения решетки.
В следующем примере значения масштабируются до 24, 23, 1 в качестве номера сетки и используютсяrounding_rule
= floor
plt.figure(
FigureClass=Waffle,
rows=5,
columns=10,
values=[48, 46, 3],
rounding_rule='floor'
)
Конечно, количество сеток также можно настроить автоматически, установив только одну строку и одно значение параметра:
fig = plt.figure(
FigureClass=Waffle,
rows=5,
values=[48, 46, 3],
)
3.3 Заголовки, ярлыки и легенды
параметр titletitle
, параметр меткиlabels
, параметр легендыlegend
. Значения этих параметров такие же, как и в matplotlib.Подробности см. в соответствующем введении к matplotlib.
data = {'Cat1': 30, 'Cat2': 16, 'Cat3': 4}
fig = plt.figure(
FigureClass=Waffle,
rows=5,
columns=10,
values=data,
title={
'label': 'Example plot',
'loc': 'left',
'fontdict': {
'fontsize': 20
}
},
labels=[f"{k} ({int(v / sum(data.values()) * 100)}%)" for k, v in data.items()],
legend={
# 'labels': [f"{k} ({v}%)" for k, v in data.items()], # lebels could also be under legend instead
'loc': 'lower left',
'bbox_to_anchor': (0, -0.2),
'ncol': len(data),
'framealpha': 0,
'fontsize': 12
}
)
3.4 Цвет шашки
параметрcolors
Принимает цвета в списке или кортеже, которые должны быть той же длины, что иvalues
. В то же время мы также можем установить параметрыcmap_name
указатьColormap
.
Укажите цвета цветов
fig = plt.figure(
FigureClass=Waffle,
rows=5,
columns=10,
values=[30, 16, 4],
colors=["#232066", "#983D3D", "#DCB732"]
)
укажите cmap_name
Поддерживаются только качественные цветовые карты, включаяPastel1
,Pastel2
,Paired
,Accent
,Dark2
,Set1
,Set2
,Set3
,tab10
,tab20
,tab20b
,tab20c
.
fig = plt.figure(
FigureClass=Waffle,
rows=5,
columns=10,
values=[30, 16, 4],
cmap_name="Accent"
)
3.5 Заполните сетку символами или значками
персонаж
Категории могут иметь разные символы для каждой категории путем передачи списка или кортежа символов в параметрcharacters
, длина должна быть такой же, какvalues
. Иногда обнаруживается, что шрифт по умолчанию не поддерживается, необходимо указать шрифт, в параметр необходимо передать абсолютный путь файла .ttf или .otffont_file
.
fig = plt.figure(
FigureClass=Waffle,
rows=5,
values=[30, 16, 4],
colors=["#4C8CB5", "#B7CBD7", "#C0C0C0"],
characters='●',
font_size=24
)
значок
PyWaffle поддерживает использованиеFont Awesome 图标
сделать рисунок
fig = plt.figure(
FigureClass=Waffle,
rows=5,
values=[30, 16, 4],
colors=["#232066", "#983D3D", "#DCB732"],
icons='star',
font_size=24
)
Каждая категория может иметь свой значок, передав список или кортеж имен значков в параметрicons
, длина должна быть такой же, какvalues
.
В Font Awesome Icons есть разные наборы иконок в разных стилях, включая Solid, Regular и Brands. можно указать параметрамиicon_style
можно установить, по умолчанию начинается сsolid
значок поиска в стиле.
использоватьicon_legend
= True
, символы в легенде будут значками. В противном случае это будет цветовая полоса.
fig = plt.figure(
FigureClass=Waffle,
rows=5,
values=[30, 16, 4],
colors=["#FFA500", "#4384FF", "#C0C0C0"],
icons=['sun', 'cloud-showers-heavy', 'snowflake'],
font_size=20,
icon_style='solid',
icon_legend=True,
legend={
'labels': ['Sun', 'Shower', 'Snow'],
'loc': 'upper left',
'bbox_to_anchor': (1, 1)
}
)
Font Awesome Icons находит значки по стилю и имени значка. Различные стили содержат разные наборы значков. Поэтому icon_style не может быть одинаковым для всех иконок. при этих обстоятельствах,icon_style
Может быть списком или кортежем стилей.
fig = plt.figure(
FigureClass=Waffle,
rows=5,
values=[30, 16, 4],
colors=["#FFA500", "#4384FF", "#C0C0C0"],
icons=['sun', 'cloud-showers-heavy', 'font-awesome-flag'],
icon_size=20,
icon_style=['regular', 'solid', 'brands'],
icon_legend=False,
legend={
'labels': ['Sun', 'Shower', 'Flag'],
'loc': 'upper left',
'bbox_to_anchor': (1, 1)
}
)
3.6 Другие свойства сетки
Другие свойства сетки включают форму нарисованной сетки, интервал, начальное положение и направление рисования.
клетчатый цвет
параметрblock_aspect_ratio
Управляйте формой сетки, изменяя соотношение ширины и высоты сетки. По умолчанию он равен 1, поэтому сетка квадратная.
fig = plt.figure(
FigureClass=Waffle,
rows=5,
values=[30, 16, 4],
block_aspect_ratio=1.618
)
интервал
параметрinterval_ratio_x
иinterval_ratio_y
Управляет горизонтальным и вертикальным расстоянием между сетками.interval_ratio_x
горизонтальное расстояние между сетками и ширина сеткиinterval_ratio_y
– отношение расстояния между сетками по вертикали к высоте сетки.
fig = plt.figure(
FigureClass=Waffle,
rows=5,
values=[30, 16, 4],
interval_ratio_x=1,
interval_ratio_y=0.5
)
отправная точка
Использовать параметрыstarting_location
Установите положение стартовой сетки. Он принимает позицию в строке, напримерNW
, SW
,NE
иSE
представляет четыре угла. По умолчанию этоSW
, что означает, что PyWaffle начинает рисовать решетку с левого нижнего угла.
Это из правого нижнего угла(SE
), чтобы начать рисовать:
fig = plt.figure(
FigureClass=Waffle,
rows=5,
values=[30, 16, 4],
starting_location='SE'
)
направление рисования
По умолчанию PyWaffle рисует столбец сетки за столбцом, поэтому категории отображаются горизонтально. Чтобы сделать его вертикальным, установите параметрvertical
заTrue
.
В приведенном ниже примере он рисует решетку из нижнего левого угла в нижний правый угол до самого верха:
3.7 Прочее
Настройка размера графики, цвета фона, DPI и т. д.
рисунокfigsize
,dpi
,facecolor
,tight_layout
и т. д. можно установить следующим образом, чтобы установить цвет фона
fig = plt.figure(
FigureClass=Waffle,
rows=5,
values=[30, 16, 4],
colors=["#232066", "#983D3D", "#DCB732"],
facecolor='#DDDDDD' # facecolor is a parameter of matplotlib.pyplot.figure
)
добавить другие элементы
В приведенном ниже примере мы используемtext()
Метод добавления пользовательского водяного знака к графике
fig = plt.figure(
FigureClass=Waffle,
rows=5,
values=[30, 16, 4]
)
fig.text(
x=0.5,
y=0.5,
s="可以叫我才哥",
ha="center",
va="center",
rotation=30,
fontsize=40,
color='gray',
alpha=0.3,
bbox={
'boxstyle': 'square',
'lw': 3,
'ec': 'gray',
'fc': (0.9, 0.9, 0.9, 0.5),
'alpha': 0.3
}
)