测试绘图是否为空

问题描述 投票:0回答:1

我想构建一个通用函数,来测试绘图是否为空。

上下文:我从一些 API 接收绘图数据。我想测试一下它是否为空。我无法访问输入数据帧,并且我想自动化测试,这样我就不必绘制图表,查看它,然后得出它是空的或非空的结论。

这是我到目前为止所拥有的;

def check_plot_data_empty(plot_data):
    if 'data' in plot_data:
        for trace in plot_data['data']:
            data_keys = ['x', 'y', 'z', 'values', 'text', 'marker']
            for key in data_keys:
                if key in trace:
                    if key == 'marker':
                        if 'size' in trace['marker'] and len(trace['marker']['size']) > 0:
                            return False
                        if 'color' in trace['marker'] and len(trace['marker']['color']) > 0:
                            return False
                    else:
                        if isinstance(trace[key], list) and len(trace[key]) > 0:
                            return False
                        if key == 'text' and isinstance(trace[key], str) and trace[key].strip():
                            return False
    return True

这对于我运行的 5-6 个示例来说非常有效。但是,我需要一种更强大的方法来测试这是否适用于所有类型的绘图。是否有阴谋测试框架,或者我可以采取的其他方法来全面测试这个功能。

我欢迎任何表明这不起作用的反例,以及用于提出它的方法,这将帮助我进一步测试。

谢谢!

python testing plotly is-empty
1个回答
0
投票

要检查

plotly
中是否有空图,您可以将可能的图组分为两部分:
graph_objects
类型和
express
类型。如果第一组完全为空,则用空的 go.Figure 表示。当图表为空时,可以通过测试
data
中不存在或为空的参数来检查这两个组。到目前为止,检查了
plotly
库中大多数不同类型的图表,我认为以下函数应该适用于几乎所有图表。

import numpy as np
import plotly.graph_objects as go
import plotly.express as px

def check_empty_plot(figure):
    # check if it is an empty go.Figure
    if figure.data == tuple():
        return True
    # check if it is an empty px plot
    # for plots like area and bar
    elif "x" in figure.data[0] and figure.data[0]["x"] is None:
        return True
    # for plots like choropleth
    elif "z" in figure.data[0] and len(figure.data[0]["z"]) == 0:
        return True
    # for plots like sunburst and treemap
    elif "values" in figure.data[0] and figure.data[0]["values"] is None:
        return True
    # for plots like line_mapbox
    elif "lat" in figure.data[0] and len(figure.data[0]["lat"]) == 0:
        return True

    return False
© www.soinside.com 2019 - 2024. All rights reserved.