Я редактирую функцию для создания графиков даты, и в ней жестко заданы параметры форматирования.Я пытаюсь добавить функцию типа format_ax
для краткости и гибкости.Я прочитал документацию по пользовательским стилям в matplotlib, но меня смущает, как или если вы можете инкапсулировать все нужные аргументы axis.set_xxx () в одну функцию, которую вы можете легко манипулировать и вызывать для нескольких пользовательскихПРОКЛАДКИ-функция.Прежде всего, я хочу знать: Могу ли я / как передать kwargs для ax.set?
В написанной мной функции уже есть kwargs для форматирования нужных цветов.Я попытался вытянуть соответствующие строки кода в его собственную функцию.Например:
def format_ax_nicely(ax, **kwargs):
ax.set_ylim(bottom=ymin, top=ymax)
Но когда я позвонил format_ax_nicely
в my_timeseries_function
следующим образом: format_ax_nicely(ax, ymin=ymin, ymax=ymax)
Я получил ошибку NameError: name 'ymin' is not defined
.
Использование ax.set()
- другой подходЯ подумал, но вы не можете устанавливать размеры, только определять пределы и значения и т. Д.
Я также попробовал метод определения функции , определенный здесь с def add_titlebox
, но я все еще не был 'не в состоянии использовать kwargs.Я получил эту ошибку:
File "C:\Users\ceres\code\improc\analysis\plot.py", line 390, in my_timeseries
title(ax, title, size=20)
TypeError: 'str' object is not callable
** edit: спасибо @TheImportanceOfBeingErnest за указание, почему эти ошибки произошли!
Это приблизительная структура моей функции:
def my_timeseries_function(lots of parameters, **kwargs, **plotargs):
# set up filesaving destination
# cleanup dataframe
# set labels
fig, ax = plt.subplots(figsize=figsize)
hues = create_custom_color_values(df, cmap, **kwargs)
ax.grid(color="k", linestyle="-", linewidth=0.05)
for g in labels:
# plot x,y with custom colors
# roughly 15 lines of formatting functions like set_ylabel, ax.legend,
# xaxis.set_major_locator, tick_params, conditional set_ylim which
# would ideally be replaced by:
format_ax_nicely(ax, **plotargs)
Цель этого вопроса - как получить функцию "форматирования", которую может вызывать my_timeseries
.Тем не менее, поскольку я новичок, если это не рекомендуется пользователями matplotlib, то я вторично спрашиваю , является ли таблица стилей "лучше"? Кажется, что трудно настроить, так как таблица стилейчасть глобальной среды, но это также может быть возможным ответом на мою задачу: упростить стилизацию моих графиков.
Дополнительный фон Некоторые пакеты Seaborn обеспечивают гибкость, сохраняя все форматирование в пределахфункция.Я не могу использовать их пакет, потому что мне нужно раскрасить точки так, как они в настоящее время не могут достичь, и я также не могу создать зависимость от seaborn в пакете, в котором я работаю.
Соответствующие пакеты для моего класса:
import numpy as np
import pandas as pd
import geopandas as gp
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import matplotlib.dates as mdates
import matplotlib.cm as cm
try:
import geoplot
except BaseException:
pass