将统计数据用彩色表格以图片的形式输出
背景:服务器搭建一个服务处理数据,并将处理的结果以excel彩色报表的形式推送给钉钉机器人。因为钉钉不支持推送表格数据,所以需要将excel转成图片输出。
1)需要解决的就是将表格转成图片形式输出,找了很多方法,还是 pip install dataframe_image最方便
import pandas as pd
import dataframe_image as dfi
df = pd.DataFrame()
dfi.export(df, "test.png")
2)以上代码在自己的电脑运行是没有问题的,因为我的电脑有Chrom浏览器,但是在服务器上会报错:找不到Chrome,这是因为表格的渲染需要Chrome驱动,所以还需要在Linux服务器上安装Chrome:教程连接
3)现在服务器上就可以截图了,但是如果表格中有中文的话,图片上显示的都是方框,所以还需要安装中文字体
sudo yum -y groupinstall Fonts
4)现在虽然可以截图,但是没有色彩,有些单调,所以在输出之前可以Style一下(可以选择其他的风格,推荐结合seaborn模块,如6)
df_styled =df.style.background_gradient()
dfi.export(df_styled, "test.png")
5)这个时候总算可以大工告成了(我也是这么想的),可打开图片一看发现,数据明明是小数点2位,但图片却是7、8位(多了好几个0)
df_styled = df.style.background_gradient().format({"col_name0":"{:.2f}", "col_name1":"{:.2f}"})
6)一个完美的例子
import pandas as pd
import seaborn as sns
import dataframe_image as dfi
df = pd.DataFrame()
cm = sns.diverging_palette(150, 275, s=80, l=55, n=9, as_cmap=True)
df_styled = df.style.background_gradient(cmap=cm).highlight_min(axis=0,color='red').highlight_null(null_color='red').format({"col0":"{:.2f}", "col1":"{:.2f}"})
dfi.export(df_styled, "test.png")