近期忙,忙于生计,三千出头的工资早已力不从心~公众号自上次更新以来已久久没有动静。今天决定再更新一篇:关于水文P-III曲线的一些内容。P-III曲线这里只讲一下绘图的问题。最近在做了几个频率曲线适线的事情,比较了手里好几个P-III曲线绘图软件:里面的几种都不失为优秀的P-III曲线分析和绘图系统,除了可以直接有系列值计算频率及绘图外,还可以实现均值、Cv、Cs的实时调整与同步绘图,有的工具甚至有一些可以用到的参数优化方法。但有时候还是有些不方便:如对经验点的定制化(定制化频率)、对微调的步长大小限制,当然其中一些工具excel版的可以通过二开实现。因此就涉及到定制化的要求。结合在最近的适线过程中个人认为:在某些特殊情况下应手动计算各经验点,然后再由绘图系统去单纯的绘图适线。因此可以计算出经验点后由仅工具二、三、四的配图系统去适线。说到定制化可以想到编程:结合vba的excel、MATLAB、Python。下面给出MATLAB、Python的P-III曲线绘图系统代码。代码来源Github,在此向原作者感谢。MATLAB版

function HessianProbabilityGrid(dataArray, estCv, estCsDivCv)    % 控制Y轴坐标上限    MAX_Y = max(dataArray);    MAX_Y = ceil(MAX_Y / 10^floor(log10(MAX_Y))) * 10^floor(log10(MAX_Y));    % 定义坐标函数    axisProb = [0.001, 0.01:0.01:0.1, 0.2:0.1:1, 1.2:0.2:2, 3:1:20, 22:2:80, 81:1:98, 98.2:0.2:99, 99.1:0.1:99.9]; %横坐标的值    axisX = norminv(axisProb / 100, 0, 1);    axisX = axisX - axisX(1);    % 纵向划分线    xLabel = [0.001 0.01 0.1 0.2 0.333 0.5 1 2 3 5 10 20 25 30 40 50 60 70 75 80 85 90 95 97 99 99.9 100];    xTick = norminv(xLabel / 100, 0, 1);    xTick = xTick - xTick(1);    for i = 1:1:size(xTick, 2)        line([xTick(i), xTick(i)], [0, MAX_Y]);    end    % 横向划分线    for i = MAX_Y / 10:MAX_Y / 10:MAX_Y        line([0, axisX(end)], [i, i]);    end    % 绘制坐标格纸    h = findobj('type', 'axes');    % 去掉x,y轴的刻度,并设置x,y轴的上下界    set(h, 'xtick', [], 'ytick', [], 'xlim', [0, axisX(end)], 'ylim', [0, MAX_Y]);    % 横坐标的值    xLabel = [0.001 0.01 0.1 0.2 0.333 0.5 1 2 3 5 10 20 25 30 40 50 60 70 75 80 85 90 95 97 99 99.9 100];    xTick = norminv(xLabel / 100, 0, 1);    xTick = xTick - xTick(1);    % 重新设置坐标轴的刻度    set(h, 'Xtick', xTick);    set(h, 'XticklabeL', {0.001 0.01 0.1 0.2 0.3 0.5 1 2 3 5 10 20 25 30 40 50 60 70 75 80 85 90 95 97 99 99.9 100});    set(h, 'Ytick', 0:MAX_Y / 10:MAX_Y);    set(h, 'YticklabeL', {0:MAX_Y / 10:MAX_Y});    % 对x,y轴进行标注    xlabel('P(%)');    ylabel('Qm(m^3/s)');    hold on;    % 原始数据处理    sortedData = sort(dataArray, 'descend'); % 排序后的数据    EX = mean(dataArray);    expProb = [1:length(sortedData)] / (length(sortedData) + 1);    % 实际数据横坐标的值    dataX = norminv(expProb, 0, 1);    dataX = dataX - norminv(0.00001, 0, 1);    % 绘制实际数据散点图    scatter(dataX, sortedData, 'k');    hold on;    % 绘制理论曲线    estCs = estCsDivCv * estCv;    % 估计的P-III型曲线参数    P3_alpha = 4 / estCs^2;    P3_beta = 2 / (EX * estCv * estCs);    P3_a0 = EX * (1 - 2 * estCv / estCs);    % 估计的gamma函数参数    gamma_alpha = P3_alpha;    gamma_beta = 1 / P3_beta;    theoryY = gaminv((100 - xLabel) / 100, gamma_alpha, gamma_beta) + P3_a0; % 注意超过制概率和不及制概率    plot(xTick, theoryY, 'k');    hold on;    % grid on;end

Python版

# -*- coding: utf-8 -*-import matplotlib.pyplot as pltimport numpy as npimport probscaleimport mathfrom scipy.stats import pearson3#plt.rcParams['font.sans-serif'] = ['Sarasa Gothic CL']plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'def p3ProbScatter(data, yLogScale=False, probLeftLim=0.1, probRightLim=99.9, show=False):    """    该函数用于绘制水文数据的散点图    data                输入的原始水文数据,建议使用np.array类    yLogScale=False     y轴是否对数化显示,默认关闭    probLeftLim=0.1     x轴,概率起始点,默认为0.1%    probRightLim=99.9   x轴,概率结束点,默认为99.9%    show=False          是否立即显示,默认不显示    fig, ax            返回图形和坐标轴对象    """    # 创建单幅    fig, ax = plt.subplots()    # 自适应Y轴上限,最高位向上取整    MAX_Y = max(data)    MAX_Y = math.ceil(MAX_Y / 10 ** math.floor(math.log10(MAX_Y))                      ) * 10 ** math.floor(math.log10(MAX_Y))    # 设置y轴的范围,以及是否对数化显示    ax.set_ylim(0, MAX_Y)    if yLogScale == True:        ax.set_yscale('log')    # 设置x轴的范围,参数应该直接为百分数    # 比如50%,直接传入50    ax.set_xlim(probLeftLim, probRightLim)    ax.set_xscale('prob')    # 对数据进行降序排序,并计算经验频率    sortedData = np.sort(data)[::-1]    expProb = np.arange(1, len(sortedData) + 1) / (len(sortedData)+1) * 100    # 绘制散点图    plt.scatter(expProb, sortedData, label='经验概率点')    if show == True:        plt.show()    # 返回图像,轴    return fig, axdef p3Stat(data):    """    该函数用于统计数据的数学期望Ex,变差系数Cv,偏态系数Cs    """    # 数学期望    Ex = np.average(data)    # 模比系数    K = data / Ex    # 变差系数    Cv = np.sqrt(np.sum((K-1)**2) / (len(data) - 1))    # 偏态系数    Cs = np.sum((K - 1)**3)/((len(data) - 3) * Cv**3)    return Ex, Cv, Csdef p3ProbPlot(Ex, Cv, Cs, show=False):    """    该函数用于绘制P3曲线    Ex          曲线的数学期望    Cv          曲线的变差系数    Cs          曲线的偏态系数    show=False  是否显示图像,默认不显示    """    # 获取理论曲线的控制点    x = np.linspace(0.1, 99.9, 1000)    theoryY = (pearson3.ppf(1 - x / 100, Cs) * Cv + 1) * Ex    # 绘制理论曲线    plt.plot(x, theoryY, 'r-', lw=2, label='理论频率曲线')    plt.legend()    if show == True:        plt.show()# 测试例子data = np.array([778, 752, 709, 697, 650, 649, 644, 642, 623, 616, 612, 605, 575,                 573, 558, 551, 541, 526, 526, 521, 519, 510, 508, 506, 494, 486,                 480, 477, 472, 461, 442, 420, 415, 410, 398, 395, 382, 379, 376,                 370, 368, 359, 350, 349, 341, 337, 336, 315, 315, 292])statResult = p3Stat(data)print(statResult)p3ProbScatter(data)p3ProbPlot(statResult[0], statResult[1], 2 * statResult[1])plt.grid(True)plt.show()

将借鉴此版MATLAB此版P-III曲线绘图函数及自己以前的部分成果,最近计划利用MATLAB App Designer设计基于MATLAB App Designer的P-III曲线绘图系统,此版:仅为绘图系统,不包含经验点的计算;包含Ex、Cv、Cs的自由步长设置及微调;暂时不包含参数优化内容。目前已经取得一些进展。余下的工作将会在以后几个月的业余时间完成。


teechart绘制实时曲线_关于PIII曲线相关推荐

  1. python如何画贝塞尔曲线_初识贝塞尔曲线

    贝塞尔曲线在CSS动画中和canvas.svg绘图中都是比较重要的一个东西!所以我来好好的小结一下关于它的一些东西. 什么是贝塞尔曲线 贝塞尔曲线于1962,由法国工程师皮埃尔·贝塞尔(Pierre ...

  2. lisp 非对称缓和曲线_非对称缓和曲线放样计算程序清单(for Casio-fx4850)

    编制:苏畅 根据他人程序结合本人实际运用修改,十分好用.上传与大家分享 非对称缓和曲线放样计算程序清单 (for  Casio-fx4850) 扩展变量操作(15个):Defm 15←┚( O为字母 ...

  3. teechart绘制实时曲线_快速学会CAD绘制传输线路图纸

    一工具 CAD工程设计软件 二方法和步骤 万事开头难,遇到不懂的知识刚开始都有畏难的情绪,只要有决心学习,诚心想学会一项技能,那学会学好它就只是时间问题了.我们常常面临时间紧.需要快速入门甚至熟练地解 ...

  4. teechart绘制实时曲线_基于OpenCV的显著图绘制

    显着性是图像的突出部分,我们的大脑会特别关注这个部分.上图突出了我们在看到一个场景或图像时会注意到的部分.例如,大家有没有曾经在看广告的时候被一些特别的内容吸引,为此我们还特意停下来多看了一会儿?这就 ...

  5. 使用keras绘制实时的loss与acc曲线

    废话不多说,直接上代码,代码有注释,不懂得评论问博主即可 # -*- coding: utf-8 -*- import keras from keras.models import Sequentia ...

  6. 边际效用递减推导需求曲线_软件需求曲线

    边际效用递减推导需求曲线 回到我将经济学工具应用于软件开发的系列文章– 软件开发中的 供需,一段时间内的 软件供应和软件供求–这次是敏捷 –是时候将我们的注意力转向需求曲线了. 首先提醒人们事情是如何 ...

  7. lisp 非对称缓和曲线_利用AutoLISP语言绘制带缓和曲线的铁路曲线平面图

    利用 AutoLISP 语言绘制带缓和曲线的铁路曲线平面图 [ 摘要 ] 通过 AutoLISP 编程方法的剖析 , 探讨了基于 Visual LISP(VLISP) 编程软件环境下 , 利用 Aut ...

  8. python绘制缓和曲线_在cad中画缓和曲线的绘制方法

    缓和曲线具有以下作用:曲率连续变化,便于车辆遵循:离心加速度逐渐变化,旅客感觉舒适:超高横坡度及加宽逐渐变化,行车更加稳定:与圆曲线配合,增加线形美观.故,缓和曲线在公路.桥梁.铁路及高速铁路中广泛采 ...

  9. stata绘制roc曲线_[转载]光滑ROC曲线的画法

    在科研统计中,有时候需要用ROC曲线来表示我们某一方法的诊断能力(或者说2分类能力),于是乎就涉及到了ROC曲线的绘制.大部分人还是会使用SPSS进行统计分析的,也有会使用SPSS绘制ROC曲线的童鞋 ...

最新文章

  1. c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)
  2. IBM X3650 M3服务器上RAID配置实战
  3. DevToys - 开发人员的瑞士军刀
  4. openwrt 遍译php_openwrt安装编译
  5. org.apache.catalina.loader.StandardClassLoader@1af33d6
  6. OSG仿真案例(8)——读取FBX格式文件并显示(无动画)
  7. 广义积分中值定理的证明(柯西中值定理)
  8. C语言ftell()函数
  9. 基于8086的中断方式4*4矩阵键盘
  10. python空格转义字符_python空格转义
  11. 信息化和信息系统知识点总结
  12. 如何写一个好的缺陷(Defect)报告
  13. 转发文章【我们是怎样一步步的走向平庸的】
  14. 集成电路光刻机精密运动台控制方法
  15. 这五本人气火爆的有声小说,能成为网络文学20年优秀有声作品吗?
  16. a或b search vim_vim入门,进阶与折腾
  17. 【图像处理】 均值滤波、中值滤波和高斯滤波
  18. BloomFilter
  19. 北京市政交通一卡通系统的应用情况研究
  20. 2022年全美最佳大学排名公布,看看谁是1400所里最好的大学!

热门文章

  1. [中英对照]The sysfs Filesystem | sysfs文件系统
  2. 05-if和switch的简单比较
  3. .DateTimeToStr函数专用优化版
  4. 解决“Automation 服务器不能创建对象”的问题!
  5. python的作用域分别有几种_python 作用域知识点整理
  6. 09:向量点积计算【一维数组】
  7. Python 3.6.x字符串格式化方法小结
  8. 详解Python中的位运算符规则、原理与用法
  9. 上下两个x轴_工业机器人到底有多少个“轴”?
  10. android中的 listview控件,聊聊Android中的ListView控件