我想构建一个通用函数,来测试绘图是否为空。
上下文:我从一些 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 个示例来说非常有效。但是,我需要一种更强大的方法来测试这是否适用于所有类型的绘图。是否有阴谋测试框架,或者我可以采取的其他方法来全面测试这个功能。
我欢迎任何表明这不起作用的反例,以及用于提出它的方法,这将帮助我进一步测试。
谢谢!
要检查
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