2 次代码提交 ffba7bbfc5 ... 5327ca6e81

作者 SHA1 备注 提交日期
  张世豪 5327ca6e81 Merge branch 'master' of http://git.in.ahbd.net/shzhang/Sanpu_Surface 1 月之前
  张世豪 38a9dbca20 更新 1 月之前
共有 1 个文件被更改,包括 53 次插入17 次删除
  1. 53 17
      report.py

+ 53 - 17
report.py

@@ -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['原样品编号'])