提供一个函数,可以获取matplotlib绘制直方图后返回的数据并整理到表格中,方便用户使用其它工具进行美化作图。
def getDataFromHistPlot(res:tuple, xname:str, yname:str)->pd.DataFrame:
"""
res: plt.hist作图后返回的对象
此函数用于获取直方图的数据,方便用户使用其它软件进行作图美化
xname: x轴名称
yname: y轴名称
"""
ys = res[0] # n_bins
xs = res[1] # n_bins + 1
xs2 = [(xs[n-1]+xs[n])/2 for n in range(len(xs)) if n>0]
df = pd.DataFrame()
df[xname] = xs2
df[yname] = ys
return df
使用方法如下面这个例子:
plt.figure(figsize=(4, 3))
res = plt.hist(data['frame'],
bins=50, range=[0,500],
ec='white',
)
df = getDataFromHistPlot(res, xname='Frame', yname='Localizations')
plt.xlabel("Frame",fontdict={'font':'Arial', 'fontsize':12})
plt.xticks()
plt.xlim(0, 500)
plt.ylabel("Localizations",fontdict={'font':'Arial', 'fontsize':12})
plt.yticks([1000*x for x in range(4)])
plt.ylim(0, 3200)
plt.show()
绘制直方图的数据就整理到变量 df 中,通过 df.to_csv
的方式就可以保存到csv文件,使用其它软件比如 OriginLab绘制最简单的bar图(注意控制间距)就可以快速复原作图了,可以免去设定 bins 数量等操作。
PS: 作图涉及到个人审美,每个人多少喜欢自己作图美化。所以与人合作的时候,一般情况下只需要提供最基础的数据可视化效果,然后再把稍微整理后的数据(无需再进行数据计算整理,可以直接绘制常见图表)导出为表格发送给对方就可以了。所以python编程在数据可视化方面,其适用范围主要是:1)自己用;2)非常规图表或者高度自定义分析结果展示。