Python实战系列(二)——基于Numpy和Matplotlib的统计分析和图表绘制(包括一次拟合和相关系数分析)

Python实战系列(二)——基于Numpy和Matplotlib的统计分析和图表绘制(包括一次拟合和相关系数分析),第1张

        2021学年第2学期遥感与GIS软件综合实习第一次作业的误差分析可视化实现部分,基于python进行简单的统计分析和图像绘制(包括一次拟合和相关系数分析),本系列主要用于记录代码,大家可进行参考,初学者,Python编码习惯不好,见谅。

import matplotlib.pyplot as plt
import numpy as np
import xlrd
# 数据导入与准备
data = xlrd.open_workbook(r'E:\UniversityGrade2\Tail\RS&GIS\Experiment\E1\Solution\ErrorAnalyze\Data.xls')
table = data.sheets()[0]
dmsp = table.col_values(2);eantli = table.col_values(3);vanui = table.col_values(4)
del dmsp[0];del eantli[0];del vanui[0]
dmsp = np.array(dmsp);eantli = np.array(eantli);vanui = np.array(vanui);

# 数据拟合
# 拟合
parameter_eantli = np.polyfit(dmsp, eantli, 1)
parameter_vanui = np.polyfit(dmsp, vanui, 1)
eantli_fit = parameter_eantli[0] * dmsp + parameter_eantli[1]
vanui_fit = parameter_vanui[0] * dmsp + parameter_vanui[1]

#相关系数
eantli_correlation = np.corrcoef(dmsp, eantli)**2
vanui_correlation = np.corrcoef(dmsp, vanui)**2

# 绘制准备
config = {# 图表绘制初始字体字典设置
    "font.family": "serif",  # 使用衬线体
    "font.serif": ["Microsoft YaHei"],  # 全局默认使用衬线宋体
    "font.size": 16,
    "font.weight": "bold",
    "axes.unicode_minus": False,
    "mathtext.fontset": "stix",  # 设置 LaTeX 字体,stix 近似于 Times 字体
}
plt.rcParams.update(config)

ticklabels_style = {# 刻度绘制初始字体字典设置
    "fontname": "Arial",
    "fontsize": 14,
}

# 开始绘制
# EANTLI
figure, ax1 = plt.subplots()
plt.scatter(dmsp, eantli, c='#8EA3C2', marker='o', label='EANTLI_Scatter')# 散点图绘制
plt.plot(dmsp, eantli_fit, ':', c='#8EA3C2', linewidth=3, label='EANTLI_Fitline')# 拟合线图绘制
ax1.grid(axis='y', linestyle='-.', alpha=0.1)# 背景网格
ax1.set_title('EANTLI,VANUI与RCNTL的回归分析', fontsize=26, weight='bold')# 图标总标题
ax1.set_xlabel('RCNTL(归一化)',weight='bold', fontsize=22)# x轴标题
ax1.set_ylim(bottom=200, top=1200)# y轴范围
ax1.set_yticks(np.arange(200, 1201, step=100))# y轴刻度
ax1.set_ylabel('EANTLI',weight='bold', fontsize=22)# y轴标题
ax1.tick_params(direction='out', width=3)# 刻度宽度,突出
ax1.legend(fontsize=22, frameon=True, loc='upper left')# 图例
plt.text(0.1, 900, r'$y=1228.316x+299.022$',fontsize=22)# 文本
plt.text(0.1, 850, r'$EANTLI:R^2=0.672$',fontsize=22)
plt.text(0.35, 500, r'$y=2.794x+37.168$',fontsize=22)
plt.text(0.35, 450, r'$VANUI:R^2=0.007$',fontsize=22)

# VANUI
ax2 = plt.twinx()# 在同一张图画ax2
plt.scatter(dmsp, vanui, c='#EDB17F', marker='o', label='VANUI_Scatter')
plt.plot(dmsp, vanui_fit, ':', c='#EDB17F', linewidth=3, label='VANUI_Fitline')
ax2.set_ylim(bottom=20, top=60)
ax2.set_yticks(np.arange(20, 61, step=4))
ax2.set_ylabel('VANUI',weight='bold', fontsize=22)
ax2.tick_params(direction='out', width=3)
ax2.legend(fontsize=22, frameon=True, loc='upper right')

plt.gca().spines['left'].set_linewidth(3)# 左边框宽度
plt.gca().spines['bottom'].set_linewidth(3)# 下边框宽度
plt.gca().spines['right'].set_linewidth(3)# 右边框宽度
plt.gca().spines['top'].set_linewidth(3)# 上边框宽度
# manager = plt.get_current_fig_manager()
# manager.window.showMaximized()
plt.savefig('EANTLI,VANUI与RCNTL的回归分析.jpg', dpi=600)
plt.show()

     

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/878002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存