使用matplotlib生成简单的html仪表板

matplotboard的Python项目详细描述


Matplotboard: For your Health!

使用matplotlib生成html仪表板的实用程序。Matplotboard使 包装绘图功能并将绘图转储到可搜索网页或标记报告中。这是最好的 以实例演示。

importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotboardasmpb@mpb.decl_figdefcool_fig():xs=np.linspace(-10,10,100)ys=xs**2plt.plot(xs,ys)if__name__=='__main__':figures={'cool_fig':cool_fig(),}mpb.render(figures)mpb.generate_report(figures,'Report')

您可以查看结果here。让我们一步一个脚印地走一遍。

首先,我们导入numpymatplotlib进行一些计算,然后绘制, 分别是以及matplotboard本身。

importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotboardasmpb

matplotboard依赖于底层呈现引擎的matplotlib,因此 但是,不支持其他打印库 matplotlib例如seaborn应该可以工作。

接下来,我们声明一个函数,它将实际执行绘图。

@mpb.decl_figdefcool_fig():xs=np.linspace(-10,10,100)ys=xs**2plt.plot(xs,ys)

装饰器decl_fig修改函数以使用matplotboard。一个 用decl_fig修饰的绘图函数必须满足以下条件 合同:

  • 已启动一个干净的figure,函数将执行任何绘图 在那个数字上。
  • 可以根据需要将图形细分为多个轴,但是 不应创建其他Figure对象。
  • 函数可以选择返回将呈现的标记文本 以及情节。
  • 函数不应该调用savefig。由matplotboard处理 自动

最后,我们声明要生成的实际图形,并告诉matplotboard呈现图形并将其组合到交互式网页中。

if__name__=='__main__':figures={'cool_fig':cool_fig(),}mpb.render(figures)mpb.generate_report(figures,'Report')

rendergenerate_report都将字典作为第一个参数。 字典键是解释为单个数字的字符串 名称和字典值是我们要生成的图(注意,即使没有参数,也必须调用函数)。

通过编写带参数的绘图函数,可以重用单个函数 制作许多不同的情节。例如,您可能有一个数据集 分为几个类别,您希望为 每一类。可以通过编写一个绘图函数并调用 它使用不同的参数来指定每个类别。

尝试运行示例。如果一切正常,应该在 当前目录名为dashboard,其中有一个名为 report.html。用浏览器打开它,可以看到包含单个 阴谋试着点击它放大视图!

一个情节不是很有趣。当有很多绘图要生成时,matplotboard才真正变得有用。看看下面的例子。

fromitertoolsimportproductimportnumpyasnpimportmatplotlib.pyplotaspltimportmatplotboardasmpb@mpb.decl_figdefcool_fig(func,scale,color='b'):xs=np.linspace(-scale,scale,100)f={'sin':lambdaxs:np.sin(xs),'tan':lambdaxs:np.tan(xs),'exp':lambdaxs:np.exp(xs),}[func]ys=f(xs)plt.plot(xs,ys,color=color)if__name__=='__main__':mpb.configure(multiprocess=True)figures={}forcolor,function,scaleinproduct('rbgk',['sin','tan','exp'],np.linspace(1,20,20)):figures[f'{function}_{color}_{scale}']=cool_fig(function,scale,color=color)mpb.render(figures)mpb.generate_report(figures,'Report')

有什么变化?您可以查看页面here

首先,plotting函数得到了增强,可以接受一些参数 这改变了它的行为。现在可以指定是否要打印 sintanexp以及有效设置x长度刻度。

其次,我们现在正在编程制作所有的绘图颜色组合, 函数,并使用product函数缩放并为每个 组合。这可以归结为4*3*20=240不同的图。加快速度 这个例子还打开了matplotboard的多处理 支持。尝试运行此示例并打开结果网页,就像 以前。注意分页功能限制了 一次。另外,试着选择一个图并在页面上移动这些图 用箭头键。最后,试试右上角的过滤框。少许 有趣的搜索可能是“sin_u”、“r_u”或“tan_u g_u 9”来搜索所有 sin图,全部是红色图,只有tan_g_9图。

最后一个例子,让我们看看对编写合并生成的图的报告的支持。

fromitertoolsimportproductimportnumpyasnpimportmatplotlib.pyplotaspltimportmatplotboardasmpb@mpb.decl_figdefcool_fig(func,scale,color='b'):xs=np.linspace(-scale,scale,100)f={'sin':lambdaxs:np.sin(xs),'tan':lambdaxs:np.tan(xs),'exp':lambdaxs:np.exp(xs),}[func]ys=f(xs)plt.plot(xs,ys,color=color)report='''\Authors: Will HuntingDate: December 2, 1997# Report On Functions## IntroductionAs we all know, there are many functions. An example is the sine function seen below.fig::sin_b_1## Other FunctionsHowever, there are many other functions such as the tangent or exponential.<div class="row"><div class="col-md-6 row_fig">fig::tan_r_1|The rugged tangent function</div><div class="col-md-6 row_fig">fig::exp_g_2|The majestic exponential function</div></div>The decision of which function is best is up to *you*!'''if__name__=='__main__':mpb.configure(multiprocess=True)figures={}forcolor,function,scaleinproduct('rbgk',['sin','tan','exp'],np.linspace(1,5,5)):figures[f'{function}_{color}_{int(scale)}']=cool_fig(function,scale,color=color)mpb.render(figures,refresh=False)mpb.generate_report(figures,'Report',body=report)

请参阅此示例的结果here

generate_report函数支持可选的body参数 向r发送matplotboard信号把降价写进报告,而不是 一个简单的情节转储。一种特殊的语法用于嵌入生成的图形。

fig::figure_name|Optional Caption

Bootstrap默认情况下包含,因此多个数字并排 可以使用rowdiv,如示例所示。

除了通过fig::构造包含生成的图形外,static 图形(如图表或照片)可以通过locfig::包括在内。 (考虑局部图形)构造,在其中指定 文件的路径。最后,可以指定Internet上的图片 通过extfig::

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java Double。将长位加倍到C#位转换器。ToDouble   java如何使用正则表达式从固定的Y位数中提取最后的X位数?   java如何显示ChatMessage类列表中的字符串消息属性?   java从JSON或XML提要导入数据,并在Android中创建列表   在整数之间使用按位AND运算符的java好处?   java从Android中的Bean类获取空值?   java会话id对另一台服务器意味着什么?   java未选择案例时开关的工作方式   java组织。openqa。硒。SessionNotCreatedException:无法创建新的远程会话。在emulator中初始化安卓驱动程序时   JavaSWT父和子对话框通信   java请确保java_HOME指向JDK而不是JRE   java用户即使在成功登录后也是匿名的   java控制器单元测试无法自动连接所需的bean   Java小程序类文件