|
@@ -771,7 +771,7 @@ def getNAndC(data, url):
|
|
|
# 设置图表布局
|
|
|
fig.update_layout(
|
|
|
title={
|
|
|
- 'text': f"有机质与全氮相关性散点图,y={round(slope,2)}x + {round(intercept,2)},R²={round(r[1],2)}",
|
|
|
+ 'text': f"有机质与全氮相关性散点图,y={round(slope,2)}x + {round(intercept,2)},R²={round(r[1], 2) ** 2},R={round(r[1],1)}",
|
|
|
'xanchor': 'center', # 控制水平对齐,可选'left', 'center', 'right'
|
|
|
'yanchor': 'bottom', # 控制垂直对齐,可选'top', 'middle', 'bottom'
|
|
|
'x': 0.5, # 控制标题的水平位置,0.5代表中心,可以是小数(相对位置)或整数(像素位置)
|
|
@@ -840,22 +840,22 @@ def getPData(data, url):
|
|
|
x1 = np.arange(0, len(data['全磷']), 1)
|
|
|
x2 = np.arange(0, len(data['有效磷']), 1)
|
|
|
x3 = np.arange(0, len(data['有效磷']/data['全磷']), 1)
|
|
|
- data1 = data.sort_values(by='全磷', ascending=True)
|
|
|
- data2 = data.sort_values(by='有效磷', ascending=True)
|
|
|
+ #data1 = data.sort_values(by='全磷', ascending=True)
|
|
|
+ #data2 = data.sort_values(by='有效磷', ascending=True)
|
|
|
data['有效磷占比'] = data['有效磷']/10*data['全磷']
|
|
|
- data3 = data.sort_values(by='有效磷占比', ascending=True)
|
|
|
- y1 = data1['全磷']
|
|
|
- y2 = data2['有效磷']
|
|
|
- y3 = data3['有效磷占比']
|
|
|
+ #data3 = data.sort_values(by='有效磷占比', ascending=True)
|
|
|
+ y1 = data['全磷']
|
|
|
+ y2 = data['有效磷']
|
|
|
+ y3 = data['有效磷占比']
|
|
|
# getImg(x1, y1,'全磷(g/kg)')
|
|
|
# getImg(x2, y2, '有效磷(mg/kg)')
|
|
|
# getImg(x3, y3, '有效磷占全磷比(%)')
|
|
|
getInteractiveImg(x1, y1,'全磷(g/kg)',[], [], '', [], [], '', url,
|
|
|
- '全磷分布图', '样品序号', '全磷(g/kg)', data1['原样品编号'])
|
|
|
+ '全磷分布图', '样品序号', '全磷(g/kg)', data['原样品编号'])
|
|
|
getInteractiveImg(x2, y2, '有效磷(mg/kg)', [], [], '', [], [], '', url,
|
|
|
- '有效磷分布图', '样品序号', '有效磷(mg/kg)', data2['原样品编号'])
|
|
|
+ '有效磷分布图', '样品序号', '有效磷(mg/kg)', data['原样品编号'])
|
|
|
getInteractiveImg(x3, y3, '有效磷占全磷比(%)', [], [], '', [], [], '', url,
|
|
|
- '有效磷占全磷比分布图', '样品序号', '有效磷占全磷比(%)', data3['原样品编号'])
|
|
|
+ '有效磷占全磷比分布图', '样品序号', '有效磷占全磷比(%)', data['原样品编号'])
|
|
|
del data['有效磷占比']
|
|
|
return abnormalData
|
|
|
|
|
@@ -886,10 +886,45 @@ def getMetal(simpleData):
|
|
|
# 16.阳离子交换量与交换性盐基总量
|
|
|
def cationExchangeCapacity(data, url):
|
|
|
# 绘图
|
|
|
- x = data['阳离子交换量']
|
|
|
- y = data['交换性盐基总量']
|
|
|
- getInteractiveImg(x, y, '阳离子交换量与交换性盐基总量相关性散点图', [], [], '', [], [], '', url,
|
|
|
- '阳离子交换量与交换性盐基总量相关性散点图', '样品序号', 'mg/kg', data['原样品编号'])
|
|
|
+ x1 = data['阳离子交换量']
|
|
|
+ y1 = data['交换性盐基总量']
|
|
|
+ fig = go.Figure(data=go.Scatter(
|
|
|
+ x=x1,
|
|
|
+ y=y1,
|
|
|
+ text=data['原样品编号'].to_numpy(),
|
|
|
+ mode='markers', name='阳离子交换量与交换性盐基总量相关性散点图',
|
|
|
+ marker=dict(
|
|
|
+ size=4, # 点的大小
|
|
|
+ color='blue', # 点的颜色
|
|
|
+ ))
|
|
|
+ )
|
|
|
+ print(3.43)
|
|
|
+ # 使用sklearn的LinearRegression进行最小二乘法拟合
|
|
|
+ model = LinearRegression()
|
|
|
+ model.fit(x1.to_numpy().reshape(-1, 1), y1)
|
|
|
+ # 计算拟合直线的斜率和截距
|
|
|
+ slope = model.coef_[0]
|
|
|
+ intercept = model.intercept_
|
|
|
+ r, _ = np.corrcoef(y1, slope * x1 + intercept)
|
|
|
+ # 绘制拟合直线
|
|
|
+ fig.add_trace(go.Scatter(x=x1, y=slope * x1 + intercept, mode='lines', name='拟合直线'))
|
|
|
+ # plt.plot(x, slope * x + intercept, color='red', label='拟合直线', linewidth=2)
|
|
|
+ # 设置图表布局
|
|
|
+ fig.update_layout(
|
|
|
+ title={
|
|
|
+ 'text': f"阳离子交换量与交换性盐基总量相关性散点图,y={round(slope, 2)}x + {round(intercept, 2)},R²={round(r[1], 2) ** 2},R={round(r[1],1)}",
|
|
|
+ 'xanchor': 'center', # 控制水平对齐,可选'left', 'center', 'right'
|
|
|
+ 'yanchor': 'bottom', # 控制垂直对齐,可选'top', 'middle', 'bottom'
|
|
|
+ 'x': 0.5, # 控制标题的水平位置,0.5代表中心,可以是小数(相对位置)或整数(像素位置)
|
|
|
+ 'y': 0.9 # 控制标题的垂直位置,0.9代表底部,可以是小数或整数
|
|
|
+ },
|
|
|
+ xaxis_title='阳离子交换量(g/kg)',
|
|
|
+ yaxis_title='交换性盐基总量(mS/cm)')
|
|
|
+ html_file_path = f"{url}/阳离子交换量与交换性盐基总量相关性散点图.html"
|
|
|
+ pio.write_html(fig, file=html_file_path, auto_open=False)
|
|
|
+ # 同时保存一份图片
|
|
|
+ pio.write_image(fig, f"{url}/阳离子交换量与交换性盐基总量相关性散点图.png")
|
|
|
+
|
|
|
|
|
|
# cationExchangeCapacity('')
|
|
|
# 17.交换性盐基:二者之差 交换性盐基总量cmol(+)/kg 交换性钙镁钠钾之和 区分ph>7.5 和ph值<7.5
|
|
@@ -965,7 +1000,7 @@ def manyTypes(data,url):
|
|
|
# 设置图表布局
|
|
|
fig.update_layout(
|
|
|
title={
|
|
|
- 'text':f"全盐量与电导率相关性散点图,y={round(slope, 2)}x + {round(intercept, 2)},R²={round(r[1], 2)}",
|
|
|
+ 'text':f"全盐量与电导率相关性散点图,y={round(slope, 2)}x + {round(intercept, 2)},R²={round(r[1], 2) ** 2},R={round(r[1], 2)}",
|
|
|
'xanchor': 'center', # 控制水平对齐,可选'left', 'center', 'right'
|
|
|
'yanchor': 'bottom', # 控制垂直对齐,可选'top', 'middle', 'bottom'
|
|
|
'x': 0.5, # 控制标题的水平位置,0.5代表中心,可以是小数(相对位置)或整数(像素位置)
|
|
@@ -994,8 +1029,9 @@ def manyTypes(data,url):
|
|
|
print(3.443)
|
|
|
|
|
|
y4 = (y2-y3)
|
|
|
- #要增加对指标值是否缺失进行判断,都不缺失绘图
|
|
|
- getInteractiveImg(x2, y2, '离子总量', x2, y3, '水溶性盐总量', x2, y4,
|
|
|
+ if not filterData.empty:
|
|
|
+ #要增加对指标值是否缺失进行判断,都不缺失绘图
|
|
|
+ getInteractiveImg(x2, y2, '离子总量', x2, y3, '水溶性盐总量', x2, y4,
|
|
|
'离子总量与水溶性盐总量之差', url,
|
|
|
'水溶性盐总量与离子总量相关性散点图', '样品数量', '离子总量/水溶性盐总量(g/kg)', data['原样品编号'])
|
|
|
|