Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Форматирование таблиц в Pandas. Учебно-методическое пособие
.pdf
21
Рис. 2.2. Таблица названий цветов
Цвета, представленные на рис. 2.1и 2.2, поддерживаются и при
выделении элементов таблиц. При использовании цветов для выделения элементов таблицы сокращенные названия не используются: вместо r надо писать red и т. д.
Цвет можно задавать и с помощью кодов. Шестнадцатеричный
код цвета состоит из шести символов. Каждая пара значений представляет собой описание одного из компонентов цвета. Это, соответственно, компоненты Red (красный), Green (зеленый) и Blue (Синий).
Например, значение #ffffff представляет белый цвет. Если пара значений в описании одного компонента цвета идентична, одно из таких значений можно убрать. Так, в примере с белым цветом его можно было
задать так: #FFF. Аналогично цвет #AABBCC идентичен #ABC.
При форматировании таблиц этот цвет задается как color='#ABC'.
При использовании цветовой модели RGB (Red, Green, Blue –
красный, зеленый, синий) цвета представляют тремя значениями, описывающими цветовые каналы – соответственно красный, зеленый и синий канал. Каждое из значений можно представить числом, находящимся в диапазоне от 0 до 255, или процентным значением – от 0 до
100 %. В этой модели черный цвет задают так: если три значения равны
0, то получится черный цвет. А если все три цветовых компонента установлены в значение 255, то получится белый. То же самое справедливо
и при использовании процентных значений. Примеры задания цвета:
color='rgb(0,0,0)', color='rgb(10%,50%,50%)'. Проценты берутся от максимального значения. Последняя запись практически эквивалентна
color='rgb(26,128,128)'.

22
При описании цветов с использованием цветовой модели RGB
можно, помимо цветовых компонентов, указывать и значение, соответствующее альфа-каналу, которое позволяет управлять непрозрачностью
цвета. Для этого используют функцию rgba(). Параметр непрозрачности – число, лежащее в интервале [0, 1]. Запись color='rgba(50,0,0,1)' эквивалентна заданию цвета color='rgb(50,0,0)'. Возможны и такие варианты: color= 'rgb(0 250 0)' или color= 'rgb(0 0 0 / .3)'. В последнем случае
задана непрозрачность, которую можно задать и в процентах:
color= 'rgb(0 0 0 / 30%)'.
Таблицу HTML-цветов вместе с их названиями, HEX- и RGB-ко-
дами можно найти, например, на сайте2. Имена цветов в HTML нечувствительны к регистру и могут записываться в любой форме. Следует
отметить, что при имеющихся 147 различных ключевых словах с названиями цветов HTML не все цвета в этом списке уникальны. Некоторые
имена обозначают один и тот же цвет. Так, например, и grey, и gray обозначают 50-процентный серый цвет #808080, а magenta – это лишь синоним HTML цвета fuchsia и ссылается на шестнадцатеричный код
цвета #FF00FF.
Цветовое пространство HSL – это цветовая модель, где цвет созда-
ется с помощью трех составляющих – тона, насыщенности и яркости:
hue – цветовой тон (оттенок), saturation – насыщенность, a lightness – яркость. Этим оно отличается от цветового пространства RGB, где любой
цвет получается при смешивании трех цветов: зеленого, красного или
синего. Обе модели работают только в виртуальных пространствах, поскольку фактически нельзя получить белый цвет, если смешать на бумаге зеленую, красную и синюю краски. Вживую – нет, но на компьютере – да. То же касается и модели HSL.
Hue отвечает за цвет, с которым пользователь будет работать.
За отправную точку разработчики модели предлагают красный, пурпур-
ный, синий, лазурный, зеленый, желтый цвета. В конвертерах Capture One
Lightroom и Adobe Camera RAW к этому списку добавлен оранжевый.
С помощью параметра saturation можно сделать цвет сочным или
приглушенным. Его используют, чтобы сделать цвет более тусклым,
менее заметным, но не менять при этом оттенок. Максимальная насыщенность – цвет сочный, неоновый, а минимальная – цвет серый. Если
2
HTML ЦВЕТА: сайт. URL: https://colorscheme.ru/html-colors.html

23
убрать насыщенность из всех цветов на картинке, получится черно-белая фотография.
Lightness – параметр, отвечающий за яркость, за то, насколько
светлым является цвет. Если повысить значение lightness до максимума,
то цвет станет чисто-белым, а если уменьшить – то черным: 0 % освещенности – это всегда черный цвет, 100 % – всегда белый. Если нужен
яркий, живой цвет, параметр lightness лучше задать равным 50 %, ровно
между черным и белым.
В цветовой модели HSL два последних параметра – saturation
и lightness – задаются в процентах. Оттенок – это градус цветового
круга. Параметр принимает значения от 0 до 360. При этом 0 (или 360)
соответствует красному цвету, 120 – зеленому, 240 – синему. Насыщенность, или интенсивность цвета – это процентное значение от 0 до
100 %. Причем 100 % гарантирует полноцветное изображение, без оттенков серого, 50 % – это 50 % серого. При значении параметра 0 %
цвет полностью серый; он становится невидимым. Яркость цвета меняется от 0 до 100 %: 0 % означает отсутствие яркости (темный), 50 % –
50 % яркости, а 100 % – полную яркость. Пример задания цвета в модели HSL: color='hsl(170, 50%, 50%)'.
LCH – это цветовое пространство, обладающее некоторыми пре-
имуществами в сравнении с цветовыми пространствами RGB/HSL,
с которыми обычно работают в CSS. LCH нацелен на то, чтобы восприниматься всеми людьми одинаково. Два цвета с равной «освещенностью» должны ощущаться одинаково светлыми. В HSL насыщенность
меняется от 0 % (нет насыщенности) до 100 % (полностью насыщенный). А вот LCH не привязан к конкретному цветовому пространству,
и не известно, где верхний предел насыщенности, так как он постоянно
меняется. С появлением новых мониторов пользователь сможет видеть
новые цвета в таких пространствах. LCH будет автоматически способен
показывать такие цвета с увеличением значения интенсивности. Значение насыщенности может значительно превышать значение 100 %,
т. е. возможен, например, такой вариант: background: lch(50% 500 20).
В цветовой модели LCH параметры задаются в процентах. Значе-
ния первого обычно задают в пределах от 0 до 360 %, остальных – от
0 до 100 %, хотя параметры модели могут и выходить за указанные пределы. При использовании модели можно задавать коэффициент непрозрачности. Примеры использования: color='lch(53 90 0)' или
color='lch(53% 90 0)', color='lch(53% 110% 190 / .7)'.

24
Цветовая модель OKLCH (Lightness, Chroma, Hue) – новый спо-
соб определять цвета в CSS, обладает многими преимуществами:
1. В отличие от rgb(), OKLCH легко интерпретировать. По задан-
ным значениям параметров цветовой модели oklch() можно без труда
определить записанный цвет. По удобству он схож с форматом HSL,
но в то же время HSL не передает яркости так, как ее видит человек.
2. OKLCH() лучше подходит для изменения цвета, чем hsl().
Он правильно передает яркость – она не меняется при смене оттенка.
3. Многие современные электронные устройства (например,
от Apple) поддерживают больше цветов, чем старые мониторы sRGB.
OKLCH позволяет использовать эти цвета.
В OKLCH(LCH) или OKLCH(LCH/a) яркость (0–100 %) переда-
ется так, как ее видит глаз, в отличие от яркости в HSL(); C – насыщенность, варьируется от серого до наиболее интенсивного оттенка; H –
оттенок, угол поворота на цветовом круге (0–360); a – непрозрачность
(0–1 или 0%–100%). Примеры использования: 'oklch(80% 20% 180)',
'oklch(53% 70% 280/.6)', color= 'oklch(80% .2 100)'.
Однако при работе с OKLCH следует помнить, что при задании
значений L, C и H есть риск получить цвет, выходящий за пределы возможностей экрана.
2 . 2 . М е т о д h i g h l i g h t _ n u l l
С помощью метода highlight_null можно выделить желаемым
цветом ячейки таблицы, в которых нет данных. Синтаксис метода:
Styler.highlight_null(color='red', subset=None, props=None)
Параметры метода:
color – строка. Цвет фона, используемый для выделения, по умол-
чанию красный;
subset – метка, объект array-like или IndexSlice. Необязательный па-
раметр, предназначенный для выбора определенных строк и столбцов;
props – строка. Значение по умолчанию – None. Параметр, зада-
ющий свойства CSS, используемые для выделения. Если параметр

25
props задан, параметр color не используется. Значение параметра props
по умолчанию – None.
Пример. Создать датафрейм с одним отсутствующим значением
и закрасить ячейку, содержащую этот элемент. Код программы:
import pandas as pd
import numpy as np
df=pd.DataFrame({'A':np.linspace(2,10000,4)})
df=pd.concat([df,pd.DataFrame(np.random.randn(4,4),
columns= list('BCDE'))], axis=1)
df.iloc[0,3]=np.nan
df.style.highlight_null(color='pink')
Результат:
В коде был использован лишь один параметр для изменения цвета элементов nan с красного (по умолчанию) на розовый. Можно закрасить
отсутствующие значения только в заданных строках и/или столбцах,
использовав параметр subset. Применим некоторые свойства к ячейкам,
содержащим пропущенные значения. Например, сделаем цвет текста
белым и выровняем текст (nan) по центру ячейки, саму ячейку закрасим
фиолетовым цветом, уменьшив непрозрачность:
df.style.highlight_null(props='color:white;\
opacity: 90%; background: purple; text-align: center')
Результат:

26
2.3 . М е т о д ы b a c k g r o u n d _ g r a d i e n t и t e x t _ g r a d i e n t
С помощью метода background_gradient можно создавать тепло-
вые карты.
Синтаксис метода:
Styler.background_gradient(cmap='PuBu', low=0, high=0, axis=0, subset=None, text_color_threshold=0.408, vmin=None, vmax=None,
gmap=None)
Параметры метода:
cmap – строка или цветовая карта. Цвет фона определяется в со-
ответствии с данными в каждом столбце, строке, фрейме данных или
по заданной карте градиента;
low, high – параметры, позволяющие при их задании при преоб-
разовании цветов не использовать весь диапазон палитры. Обычно значения выбирают из интервала [0, 1], значения по умолчанию – 0;
axis – ось. Указывает область применения: к каждому столбцу
(axis=0 или 'index'), к каждой строке (axis=1 или 'columns'), ко всему датафрейму сразу (axis=None);
subset – метка, объект array-like или IndexSlice. Необязательный па-
раметр, предназначенный для выбора определенных строк и столбцов;
text_color_threshold – число. Порог яркости для определения
цвета текста в интервале [0, 1]. Облегчает видимость текста при различных цветах фона. Весь текст в ячейках темный, если значение равно 0,
и светлый – если значение равно 1. При промежуточных значениях
между 0 и 1 цвет текста в ячейке подбирается в зависимости от цвета
ячейки. Значение по умолчанию – 0.408;
vmin, vmax – число типа float. Минимальное (максимальное) зна-
чение данных соответствует минимальному (максимальному) значению цветовой карты. Если не указано иное, будет использоваться минимальное значение данных (при отсутствии параметра gmap);
gmap – данные типа array-like. Карта градиента для определения
цветов фона. Если параметр не указан, то будут использоваться базовые
данные из строк, столбцов или фрейма данных. Если значение задано
в виде ndarray или списка, оно должно иметь форму, идентичную
форме базовых данных, с учетом оси и параметра subset. Если значение
задано с помощью элементов DataFrame или Series, они должны иметь
одинаковые метки индексов и столбцов с учетом оси и параметра subset.
По умолчанию используется палитра, имеющая голубой оттенок, а ячейки
с большими значениями закрашиваются более темными цветами.

27
Код программы с примером применения метода background_gra-
dient без параметров:
import pandas as pd; import numpy as np
df=pd.DataFrame(np.random.randn(4,4),
columns= list('BCDE'))
df.iloc[0,3]=np.nan
df.style.background_gradient()
Результат:
Не обязательно раскрашивать весь набор данных – параметр
subset позволяет ограничить список столбцов для закраски, например,
так: df.style.background_gradient(subset=['B', "C"]).
Применим к столбцу С карту градиента, заданную с помощью па-
раметра gmap:
df.style.background_gradient(subset=["C"], gmap=[0, 4, 7, 1])
В этом случае самыми темными цветами будут выделены ячейки второй и первой строк столбца С, а самыми светлыми – ячейки нулевой
и третьей строк. Значения столбца С при выборе цвета в этом случае не
играют роли. Результат работы кода:
Цветовую карту, установленную по умолчанию, можно изменить:
s = df.style.background_gradient(cmap='RdYlGn_r'); s
Результат:

28
Применим к столбцу С цветовую карту, заданную парамет-
ром cmap. Правила закрашивания ячеек этого столбца зададим парамет-
ром gmap. Код программы:
s = df.style.background_gradient(subset=["C"],
gmap=[4,4,8,12],cmap='Spectral')
s
Выполнив код, получили:
В силу одинаковых значений в списке gmap данные первых двух
строк закрасились одним цветом.
Так можно применить метод background_gradient к одной строке:
df.style.background_gradient(subset=(1,), axis=1)
Результат:
Метод background_gradient принимает аргументы low и high,
например: df.style.background_gradient(cmap='RdYlGn_r', low=.1, high=.8).
В этом случае при преобразовании цветов весь диапазон палитры не применяется. Это может помочь в том случае, если при использовании всей
палитры текст становится трудночитаемым.
Можно применить к датафрейму оба рассмотренных метода –
background_gradient и highlight_null, ограничив в первом случае диапазон палитры:
df.style.background_gradient(cmap='bwr_r', low=.4, high=0.9) \
.highlight_null('purple')
Результат:

29
Приведем более сложный пример использования функций стили-
зации таблицы для преобразования исходного датафрейма. Создадим
датафрейм с данными о погоде в двух городах Китая. Код программы:
import pandas as pd
day_weather_df = pd.DataFrame([[11, 6],[19, 13],[25, 19],
[29, 23], [30, 25]], index=pd.date_range(start="2022-03-01",
freq='M', periods=5), columns=["Пекин", "Гуанчжоу"])
display(day_weather_df)
Выполнив код, получили таблицу:
Создадим две функции. Первая из них (temperature_condition) бу-
дет заменять числовые значения температуры вербальными. С помощью второй сформируем объект Styler, в котором создадим заголовок
таблицы, изменим стиль вывода даты и с помощью выбранной цветовой шкалы в зависимости от температуры каждую ячейку таблицы закрасим своим цветом. Код создания описанных функций:
import pandas as pd
day_weather_df = pd.DataFrame([[11, 6],[19, 13],[25, 19],
[29, 23], [30, 25]], index=pd.date_range(start="2022-03-01",
freq='M', periods=5), columns=["Пекин", "Гуанчжоу"])
display(day_weather_df)
def temperature_condition(v):
if v < 15:
return "Холодно"
elif v < 20:
return "Прохладно"
elif v < 28:
return "Тепло"
return "Жарко"

30
def make_pretty(styler):
styler.set_caption("Температурные условия")
styler.format(temperature_condition)
styler.format_index(lambda v: v.strftime("%B"))
styler.background_gradient(axis=None, vmin=0,
vmax=35, cmap="YlOrRd")
return styler
Вывод получившейся таблицы осуществим методом style.pipe:
day_weather_df.style.pipe(make_pretty)
Результат выполнения объединенного кода:
В качестве цветовой карты можно выбрать одно из значений:
'Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r',
'BuPu', 'BuPu_r', 'CMRmap', 'CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu',
'GnBu_r', 'Greens', 'Greens_r', 'Greys', 'Greys_r', 'OrRd', 'OrRd_r', 'Oranges',
'Oranges_r', 'PRGn', 'PRGn_r', 'Paired', 'Paired_r', 'Pastel1', 'Pastel1_r',
'Pastel2', 'Pastel2_r', 'PiYG', 'PiYG_r', 'PuBu', 'PuBuGn', 'PuBuGn_r',
'PuBu_r', 'PuOr', 'PuOr_r', 'PuRd', 'PuRd_r', 'Purples', 'Purples_r', 'RdBu',
'RdBu_r', 'RdGy', 'RdGy_r', 'RdPu', 'RdPu_r', 'RdYlBu', 'RdYlBu_r',
'RdYlGn', 'RdYlGn_r', 'Reds', 'Reds_r', 'Set1', 'Set1_r', 'Set2', 'Set2_r', 'Set3',
'Set3_r', 'Spectral', 'Spectral_r', 'Wistia', 'Wistia_r', 'YlGn', 'YlGnBu',
'YlGnBu_r', 'YlGn_r', 'YlOrBr', 'YlOrBr_r', 'YlOrRd', 'YlOrRd_r', 'afmhot',
'afmhot_r', 'autumn', 'autumn_r', 'binary', 'binary_r', 'bone', 'bone_r', 'brg',
'brg_r', 'bwr', 'bwr_r', 'cividis', 'cividis_r', 'cool', 'cool_r', 'coolwarm',
'coolwarm_r', 'copper', 'copper_r', 'cubehelix', 'cubehelix_r', 'flag', 'flag_r',
'gist_earth', 'gist_earth_r', 'gist_gray', 'gist_gray_r', 'gist_heat', 'gist_heat_r',
'gist_ncar', 'gist_ncar_r', 'gist_rainbow', 'gist_rainbow_r', 'gist_stern',
'gist_stern_r', 'gist_yarg', 'gist_yarg_r', 'gnuplot', 'gnuplot2', 'gnuplot2_r',
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
