本文记录一下在实现 DDRQM 过程中的一些 matplotlib 包和 python 相关知识点。
1.matplotlib.pyplot.hist
或plt.hist
:用于绘制直方图。
2.matplotlib.pyplot.show
或plt.show
:用于展示所有打开的图片。完整调用形式如下:
1
| matplotlib.pyplot.show(*, block=None)
|
block
:布尔类型,可选。表示在返回之前是否等待所有figures关闭。默认为True,通常在非交互模式使用;交互模式通常设为False。
参考资料:
- matplotlib.pyplot.show
3.matplotlib.pyplot.imshow
或plt.imshow
:用于将数据作为图像展示,例如以2∗2的形式展示4张图片。输入要么是RGB(A)数据,要么是二维的标量数据,后者将被渲染成一张具有伪颜色的图像。显示灰度图时可以设置参数cmap='gray'
。完整调用形式为:
1
| matplotlib.pyplot.imshow(X, cmap=None, norm=None, *, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, interpolation_stage=None, filternorm=True, filterrad=4.0, resample=None, url=None, data=None, **kwargs)
|
参考资料:
- matplotlib.pyplot.imshow
4.当使用matplotlib画有很多subplots的图时,改善subplots布局:
参考资料:
- Improve subplot size/spacing with many subplots in matplotlib
5.使用matplot画散点图,利用scipy计算相关系数并利用sklearn计算回归:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression import numpy as np from scipy.stats import pearsonr
def point_plot(model, dataset, size=0.1): score_avgf_file = model + '_' + dataset + '.txt' score_avgf_pair = open('./txt/' + score_avgf_file).read().splitlines() score = [] avgf = [] for pair in score_avgf_pair: score.append(float(pair.split(' ')[0])) avgf.append(float(pair.split(' ')[1])) scores = np.array(score) avgfs = np.array(avgf)
corrco = pearsonr(scores, avgfs) plt.scatter(scores, avgfs, s=size) plt.xlabel('image complexity') plt.ylabel('avg F') title = model + ' on ' + dataset + ', correlation coefficient=' + str(corrco[0]) plt.title(title) save_fig = model + '_' + dataset + '.png'
reg = LinearRegression().fit(scores.reshape(-1,1), avgfs) pred = reg.predict(scores.reshape(-1,1)) plt.plot(scores, pred,linewidth=2, color='red', label='回归线')
plt.savefig('./fig/' + save_fig) plt.show()
|
> 参考资料:
> 1. [从零开始学Python【15】--matplotlib(散点图) - 天善智能:专注于商业智能BI和数据分析、大数据领域的垂直社区平台](https://ask.hellobi.com/blog/lsxxx2011/10243)
> 2. [如何在 Matplotlib 中设置散点图的标记大小](https://www.delftstack.com/zh/howto/matplotlib/how-to-set-marker-size-of-scatter-plot-in-matplotlib/)
> 3. [Matplotlib 散点图 | 菜鸟教程](https://www.runoob.com/matplotlib/matplotlib-scatter.html)
> 4. [Python三种方法计算皮尔逊相关系数](https://blog.csdn.net/qq_40260867/article/details/90667462)
5.由于OpenCV读取的图片默认三通道顺序为BGR,所以在使用matplotlib进行画图时,需要对其通道顺序进行调整:
1 2 3 4 5
| from matplotlib import pyplot as plt plt.subplot(1,1,1) plt.imshow(result[:, :, [2, 1, 0]]) plt.title("result") plt.show()
|