如何使用matplotlib kwargs跨函数自定义格式?

2024-10-16 20:48:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编辑一个函数来创建日期图,它有硬编码的格式化参数。为了简洁和灵活,我尝试添加一个format_ax类型的函数。我已经阅读了matplotlib中关于custom styling的文档,但是我不知道如何或者是否可以封装所有需要的内容轴集?xxx()将参数放入一个函数中,您可以轻松地操作和调用多个自定义绘图函数。首先,我想知道:我能/如何通过夸克斧头吗?

我编写的函数已经有了用于格式化所需颜色的kwargs。我试着把相关的代码行放入它自己的函数中。例如:

def format_ax_nicely(ax, **kwargs):
       ax.set_ylim(bottom=ymin, top=ymax)

但是当我在my_timeseries_function中调用format_ax_nicely时,我遇到了一个错误NameError: name 'ymin' is not defined。在

使用ax.set()是我考虑过的另一种方法,但是您不能设置大小,只能定义限制和值等。。在

我也尝试了函数定义方法defined heredef add_titlebox,但我仍然不能使用kwargs。我有个错误:

^{pr2}$

**编辑:感谢@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可以调用的“format”函数。然而,由于我是一个新手,如果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

Tags: 函数importformatmatplotlibmydefas错误
1条回答
网友
1楼 · 发布于 2024-10-16 20:48:17

我很难理解你到底需要什么。我确实认为使用函数的方法,它可以设置轴的样式。在

也许是个提醒:如果一个变量没有被定义,它就不能被使用。所以你得到了错误。 你的选择是

  • 定义参数

    def format_ax_nicely(ax, ymin=0, ymax=1):
        ax.set_ylim(bottom=ymin, top=ymax)
    
  • 从关键字获取参数

    def format_ax_nicely(ax, **kwargs):
        ax.set_ylim(bottom=kwargs.get("ymin", 0), top=kwargs.get("ymax", 1))
    
  • 关于标题的字体大小

    ax.title.set_size(20)
    

一些样式选项可以通过rcParams全局设置。它们包括字体、大小、颜色、轴记号外观等,但绘图的限制不在这些范围之内。不过,您可以在临时样式的上下文中使用它们

with plt.style.context(('my_style_sheet')):
    my_timeseries_function(lots of parameters, kwargs, plotargs)
plt.show()

相关问题 更多 >