精华内容
下载资源
问答
  • EXCEL自动计算液塑限并绘制图表至双对数坐标系精品论文 参考文献EXCEL自动计算液塑限并绘制图表至双对数坐标系湖南理工职业技术学院 湖南湘潭 411000 摘要:用解析法计算液塑限试验数据,并将其编制成EXCEL表格并...

    EXCEL自动计算液塑限并绘制图表至双对数坐标系

    精品论文 参考文献

    EXCEL自动计算液塑限并绘制图表至双对数坐标系

    湖南理工职业技术学院 湖南湘潭 411000 摘要:用解析法计算液塑限试验数据,并将其编制成EXCEL表格并绘制图表至双对数坐标系,由此确定出的液限、塑限值,较传统方法方便、快捷、准确。 关键词:土工试验;EXCEL;液塑限;解析法;双对数;解析法 0 概述 土的液塑限指标是细粒土进行分类和定名的最基本指标,在土工试验中具有很重要的作用。这两个指标一般通过土的液塑限联合测定法进行测定,由其求得的液性指数在一定程度上反映了粘性土的结构特征,可用于评价土的强度和压缩性,也是获取一般粘性土地基承载力值的重要指标。因此,准确确定土壤的液塑限指标对工程具有很重要的意义。 按照 《土工试验规程》SL237-1999 (以下简称《规程》)的规定,该试验数据处理采用绘图——查图的方法。由于图形要绘在对数坐标下,绘制过程相当复杂,且绘图、查图过程中均有误差的产生,因此,该试验的数据既费时、费力,又难以保证精度。 本文通过解析法代替手工绘图、查图过程的数据处理方法,用EXCEL编写了相应的表格进行自动计算并并绘制图表至双对数坐标系,取得了良好的效果。 1.液塑限自动计算思路 繁琐的查图过程背后,实际上隐藏着一定的数学关系。只要把这种数学关系找出来,就可以在EXCEL中用简洁的数学运算代替查图操作。 EXCEL具有绘制曲线、折线、散点图等各种图表的功能,只要知道坐标,绘制图表是比较容易的。而液塑限用的是双对数坐标,双对数坐标系通常可以根据测试数据使用origin或matlab来绘制,在这里我选用应用最广泛的Excel完成液塑限试验中双对数坐标的绘制。如何将绘制双对数坐标系和将直线绘制到双对数坐标系是本文的难题。 算术坐标系:就是普通的笛卡儿坐标系,横纵的刻度都是是等距的。(举例来说:如果每1cm的长度都代表2,则刻度按照顺序1,3,5,7,9,11,13,15……) ;但一般情况下,刻度仍然是均匀的,按照0,1,2,3,4的顺序排列下去。 双对数坐标系,就是图的两个坐标轴的刻度均为对数刻度,这样一来的话,形如y=ax^b的指数曲线,在双对数曲线图中就表现为一条直线,b就是这条直线的斜率(这里的斜率并不是按数轴上的刻度值计算的,而是将坐标轴看成普通坐标轴,按坐标轴的单位长度计算的)。 可以这样来理解,将y=ax^b两边都取对数,得到:ln(y) = ln(a) + bln(x),令 = ln(y), = ln(x), 那么在对数曲线图中,得到的就是一条=+ b的直线,数轴的长度单位用的就是和的单位,但是“对数曲线图”的“对数”指的是刻度取对数,所以数轴上的值标的还是x和y的值,所以相邻长度单位上标的数值随数轴的延伸相差越大,也就是说每次增加1,但是x 增加的幅度却是按= ln(x)越来越大的。 对数坐标有几个特点,在应用时需特别注意: (1) 标在对数坐标轴上的数值为真数。 (2) 坐标的原点为x=1,y=1,而不是零。因为1ogl=0。 (3) 由于0.01、0.1、1,10、100等的对数,分别为-2、-1、0、1、2等,所以在坐标纸上,每次数量级的距离是相等的。 (4) 在对数坐标上求斜率的方法,与笛卡儿坐标上的求法有所不同。这一点需要特别注意。在笛卡儿坐标上求斜率可直接由坐标度来度量,如斜率△Y/△X;而在双对数坐标上求斜率则不能直接由坐标度来度量,因为在对数坐标上标度的数值是真数而不是对数。因此双对数坐标纸上直线的斜率需要用对数值来求算,或者直接用尺子在坐标纸上量取线段长度求取。斜率: x=a/b=(logy2-logy1)/( (logx2-logx1) 式中△h与△1的数值,即为用尺子测量而得的线段长度。 (5) 在双对数坐标上,直线与x=1的纵轴相交处的y值,即为原方程 中的 值,若所标绘的直线需延长很远才能与x=1的纵轴相交,则可求得斜度x之后,在直线上任取一组数据x和y,代入原方程 y=axn中,也可求得 值 EXCEL绘制双对数坐标系 3.将算术坐标系统改为双对数坐标系 上图出现的坐标系是算术坐标系,我们需要将其改为双对数坐标系,然后将其它数据在双对数坐标系上绘制成直线。 右击X轴,出现如图快捷菜单 4.其它直线段的绘制

    展开全文
  • loglog双对数坐标

    万次阅读 2016-10-11 23:14:18
    双对数坐标图可以放大细微的变化 双对数坐标可以横跨几个数量级

    双对数坐标图可以放大细微的变化

    In log-log graphs, both axes have a logarithmic scale.
    The idea here is we use semilog or log-log graph axes so we can more easily see details for small values of y as well as large values of y.

    http://www.intmath.com/exponential-logarithmic-functions/7-graphs-log-semilog.php

    双对数坐标可以横跨几个数量级

    A log-log graph has logarithmic coordinates along both axes. It is basically a plot of log y against log x. Log-log plots are useful for plotting scientific and technical data because they allow the data to span several orders of magnitude

    http://forums.codeguru.com/showthread.php?307638-How-to-plot-Log-Log-Graph&p=1004103#post1004103

    展开全文
  • 这意味着两个坐标轴对数坐标,也就是说,如果它们对应于x和y轴,则两个轴的值等于相应的基准。(注意:在各自的轴上是一个真实的数字,而不是对数后的值。)例如:如果每1cm代表10次幂增加,则坐标轴刻度为1,10,100,...

    这意味着两个坐标轴是对数坐标,也就是说,如果它们对应于x和y轴,则两个轴的值等于相应的基准。

    (注意:在各自的轴上是一个真实的数字,而不是对数后的值。)

    例如:如果每1cm代表10次幂增加,则坐标轴刻度为1,10,100,1000,10000

    60f3e63173c4110f5ca111acfe5c5518.png扩展资料

    plt.gca().invert_xaxis()#x轴反转,大的值在前面,小的值在后面

    import numpy as np

    import matplotlib.pyplot as plt

    def Draw():

    x=Freq

    plt.figure(num=“Roxy,Royx,PHSxy,PHSyx曲线”)

    plt.rcParams[‘font.sans-serif’]=[‘SimHei’]

    plt.rcParams[‘axes.unicode_minus’]=False

    plt.scatter(Freq,Roxy,marker=‘s’,alpha=0.5,c=‘r’)

    plt.title(“Roxy曲线”)

    plt.grid(True)

    plt.loglog(x,Roxy,label=“Roxy”,color=‘r’,linewidth=1)#绘制双对数曲线

    plt.gca().invert_xaxis()#x轴反转,大的值在前面,小的值在后面

    plt.show()

    Draw()

    参考资料来源:百度百科-双对数坐标

    展开全文
  • matlab双对数坐标及拟合使用的函数及使用方法
  • https://blog.csdn.net/Yyuanyuxin/article/details/109176493,效果如博客所示,为双对数坐标的折线图绘制,已封装成控件,可直接使用,带源码,没添加的属性,也可直接修改添加。
  • 工作需要实现一个双对数曲线图,没找到现成的插件,最后决定还是自己自绘一个,封装成插件算了。。。 最后的效果如下: 控件的属性设置如下为双对数曲线: 其他属性看说明即可,都在杂项里面比较简单。 ps:注意...

    工作需要实现一个双对数曲线图,没找到现成的插件,最后决定还是自己自绘一个,封装成插件算了。。。
    最后的效果如下:
    在这里插入图片描述

    源码链接:
    https://download.csdn.net/download/Yyuanyuxin/12979912

    封装控件的使用

    控件的属性设置如下为双对数曲线:
    在这里插入图片描述
    其他属性看说明即可,都在杂项里面比较简单。
    ps:注意对数的话,不可设置最大最小值为0。
    设置完成属性后,可直接输入数据(属性Datas)或者代码输入:
    代码使用方式:

    public void GetLine()
    {
        var ss = new List<PointF> { new PointF(33F, 5F), new PointF(0.2F, 100F), new PointF(65F, 34F), new PointF(10000, 10000) };
        myDrawChart1.Datas = new List<MyDrawChartLine>() { new MyDrawChartLine(ss, default) };
    }
    //绘制曲线
    private void button1_Click(object sender, EventArgs e)
    {
        GetLine();
        myDrawChart1.UpdateMenu();
    }
    //随机添加曲线
    private void button2_Click(object sender, EventArgs e)
    {
        Random ss = new Random();
        var aaaa = new List<PointF> { new PointF((float)(ss.Next(1,44)), (float)(ss.Next(1, 34))), new PointF((float)(ss.Next(51, 676)), (float)(ss.Next(34, 3334))), new PointF((float)(ss.Next(1, 4344)), (float)(ss.Next(66, 1244))), new PointF((float)(ss.Next(33, 8888)), (float)(ss.Next(10, 10000))) };
        myDrawChart1.AddLine(new MyDrawChartLine(aaaa, default));
    }
    //清除所有曲线
    private void button3_Click(object sender, EventArgs e)
    {
        myDrawChart1.Clear();
    }
    

    主要代码解析

    1.绘制坐标线段

    var g = _control.CreateGraphics();//获取画布
    StartPoint = new PointF(VerticalMargin, height - HorizontalMargin);//VerticalMargin左右边距,HorizontalMargin垂直边距
    //绘制X轴,
    MaxPointX = new PointF(width - VerticalMargin, height - HorizontalMargin);
    g.DrawLine(new Pen(Brushes.Black, 2), StartPoint, MaxPointX);
    //绘制Y轴
    MaxPointY = new PointF(VerticalMargin, HorizontalMargin);
    g.DrawLine(new Pen(Brushes.Black, 2), MaxPointY, StartPoint);
    
    

    2.绘制x轴的对数坐标:

    float LenX = width - 2 * HorizontalMargin;
    var maxIndex = (float)Math.Log10(maxX);
    var minIndex = (float)Math.Log10(minX);
    int mainScaleCout = Math.Abs(Convert.ToInt32(maxIndex - minIndex));
    for (int i = 0; i <= mainScaleCout; i++)//mainScaleCout等份Y轴
    {
        var xValue = LenX * i / mainScaleCout + HorizontalMargin;
        PointF py1 = new PointF(xValue, height - HorizontalMargin + 5);
        PointF py2 = new PointF(xValue, height - HorizontalMargin);
        var inner = (float)Math.Pow(10, maxIndex - i);
        string sy = inner.ToString();
        g.DrawLine(new Pen(Brushes.Black, 2), py1, py2);//绘制刻度线
        g.DrawString(sy, new Font("宋体", 8f), Brushes.Black, new PointF(xValue - 3, height - HorizontalMargin / 1.1f));//绘制刻度值
        if (i > 0)//子刻度线不均,分为10段
        {
            float yLast = LenX / mainScaleCout * (i - 1) + VerticalMargin;
            var yValueMax = (float)Math.Log10(Math.Pow(10, maxIndex - i + 1));
            var yValueMin = (float)Math.Log10(inner);
            for (int j = 1; j < 9; j++)
            {
                var value = (float)Math.Log10(inner + (inner * j));
                float maxValue1 = yLast - (((yValueMax - value) / (yValueMax - yValueMin)) * (yLast - xValue));
    
                PointF px11 = new PointF(maxValue1, height - HorizontalMargin);
                PointF px21 = new PointF(maxValue1, height - HorizontalMargin + 4);
                g.DrawLine(new Pen(Brushes.Black, 2), px11, px21);
            }
        }
    
    }
    //绘制y轴标题
    Pen pen = new Pen(Color.Black, 1);
    g.DrawString(XName, new Font("宋体 ", 10f), Brushes.Black, new PointF(width - HorizontalMargin / 1.5f, height - HorizontalMargin / 1.5f));
    
    

    3.绘制y轴的对数坐标:

    和y轴原理类似

    float LenY = height - 2 * VerticalMargin;
    var maxIndex = (float)Math.Log10(maxY);
    var minIndex = (float)Math.Log10(minY);
    int mainScaleCout = Math.Abs(Convert.ToInt32(maxIndex - minIndex));
    for (int i = 0; i <= mainScaleCout; i++)//len等份Y轴
    {
        var yValue = LenY / mainScaleCout * i + VerticalMargin;
        PointF px1 = new PointF(VerticalMargin, yValue);
        PointF px2 = new PointF(VerticalMargin - 5, yValue);
        float inner = (float)Math.Pow(10, maxIndex - i);
        string sx = inner.ToString();
        g.DrawLine(new Pen(Brushes.Black, 2), px1, px2);
        StringFormat drawFormat = new StringFormat();
        drawFormat.Alignment = StringAlignment.Far;
        drawFormat.LineAlignment = StringAlignment.Center;
        g.DrawString(sx, new Font("宋体", 8f), Brushes.Black, new PointF(VerticalMargin / 1.2f, LenY * i / mainScaleCout + VerticalMargin * 1.1f), drawFormat);
        if (i > 0)
        {
            float yLast = LenY / mainScaleCout * (i - 1) + VerticalMargin;
            var yValueMax = (float)Math.Log10(Math.Pow(10, maxIndex - i + 1));
            var yValueMin = (float)Math.Log10(inner);
            var singleWidth = (yValue - yLast);
            for (int j = 1; j < 9; j++)
            {
                var value = (float)Math.Log10(inner + (inner * j));
                float maxValue1 = yLast - (((yValueMax - value) / (yValueMax - yValueMin)) * (yLast - yValue));
    
                PointF px11 = new PointF(VerticalMargin, maxValue1);
                PointF px21 = new PointF(VerticalMargin - 4, maxValue1);
                g.DrawLine(new Pen(Brushes.Black, 2), px11, px21);
            }
        }
    
    }
    Pen pen = new Pen(Color.Black, 1);
    g.DrawString(YName, new Font("宋体 ", 10f), Brushes.Black, new PointF(VerticalMargin / 3, VerticalMargin / 2f));
    
    

    4.绘制曲线

    先排序数据

    if (lp == null) return null;
    for (int i = 0; i < lp.Count - 1; i++)
    {
        for (int j = 0; j < lp.Count - 1 - i; j++)// j开始等于0,  
        {
            if (lp[j].X > lp[j + 1].X)
            {
                PointF temp = lp[j];
                lp[j] = lp[j + 1];
                lp[j + 1] = temp;
            }
        }
    }
    return lp;
    

    转换数据点成为坐标点

    List<PointF> listPointGraphics = new List<PointF>();//图上的点
    foreach (PointF point in listPointData)
    {
    	PointF p = new PointF();
        float valueY = (float)Math.Log10(point.Y);
        float valueX = (float)Math.Log10(point.X);
        float valueMaxX = (float)Math.Log10(MaxXValue);
        float valueMinX = (float)Math.Log10(MinXValue);
        float valueMaxY = (float)Math.Log10(MaxYValue);
        float valueMinY = (float)Math.Log10(MinYValue);
        p.Y = MaxPointY.Y - (((valueMaxY - valueY) / (valueMaxY - valueMinY)) * (MaxPointY.Y - StartPoint.Y));
        p.X = MaxPointX.X - (((valueMinX - valueX) / (valueMinX - valueMaxX)) * (MaxPointX.X - StartPoint.X));
        listPointGraphics.Add(p);
    }
    

    绘制曲线:

    GraphicsPath gpArea = new GraphicsPath();
    for (int i = 0; i < listPointGraphics.Count - 1; i++) 
    {
    	gpArea.AddLine(listPointGraphics[i], listPointGraphics[i + 1]);
    }
    g.DrawPath(new Pen(lineColor, lineWidth), gpArea);  //边缘 
    gpArea.CloseFigure();  //是否封闭
    
    展开全文
  • matlab 对数坐标系绘图函数

    千次阅读 2017-03-14 10:54:59
    对数转换有双对数坐标转换和单对数坐标转换两种。用loglog函数可以实现双对数坐标转换,用semilogx和semilogy函数可以实现单对数坐标转换。 loglog(...)  表示x,y坐标都是对数坐标系 semilogx(...) 表示x坐
  • 在半对数坐标系下绘图 clc,clear; close all; x=0:0.01:1; y=10.^x; subplot(1,2,1),semilogy(x,y) subplot(1,2,2),plot(x,y) 双对数坐标 clc,clear; close all; x=0:0.01:1; y=exp(x)+exp(-x); subplot(1,2,1),...
  • MATLAB画对数坐标

    万次阅读 2018-06-15 22:31:55
    对数转换有双对数坐标转换和单对数坐标转换两种。用loglog函数可以实现双对数坐标转换,用semilogx和semilogy函数可以实现单对数坐标转换。loglog(Y) 表示 x、y坐标都是对数坐标系semilog...
  • matlab 对数坐标

    2011-06-28 21:52:00
    对数转换有双对数坐标转换和单对数坐标转换两种.用loglog函数可以实现双对数坐标转换,用semilogx和semilogy函数可以实现单对数坐标转换. loglog(Y) 表示 x、y坐标都是对数坐标系 semilogx(Y) 表示 x...
  • 数据可视化是利用我们的视觉感知能力,对数据进行有效地展示与传递,放大我们对于信息的感知能力的一个过程。数据可视化在我们日常的生活中发挥着...坐标系:如笛卡尔坐标系、极坐标系等;可视化元素:如点、线、...
  • matlab画对数坐标

    千次阅读 2017-05-02 11:34:03
    对数转换有双对数坐标转换和单对数坐标转换两种。用loglog函数可以实现双对数坐标转换,用semilogx和semilogy函数可以实现单对数坐标转换。 loglog(Y) 表示 x、y坐标都是对数坐标系 semilogx(Y)
  • 对数坐标&matlab实现

    千次阅读 2020-09-22 17:04:15
    文章目录一、坐标系介绍1.1 算数坐标系(笛卡尔坐标系)1.2 对数坐标系1.3 两者的区别二、基于matlab的实例分析2.1 举例2.2 分析与证明 一、坐标系介绍 1.1 算数坐标系(笛卡尔坐标系) 算术坐标系统是普通的笛卡儿...
  • python画对数与半对数坐标

    万次阅读 2019-05-08 15:43:50
    # 双对数坐标下 fig, ax = plt.subplots() ax.set_xscale("log") ax.set_yscale("log") ax.set_adjustable("datalim") ax.plot(c[1][:-1], c[0], 'o') ax.set_xlim(1e-1, 1e6) ax.set_ylim(1e-2, 1e6) ax....
  • python 绘制对数坐标散点图

    千次阅读 2019-11-27 16:24:33
    import os import networkx as nx import matplotlib.pyplot as plt import math import numpy as np BA = nx.random_graphs.barabasi_albert_graph(5000, 3) ...#生成x序列,从1到最大度 ...
  • 有时,变量变化范围很大,如x从0.01到100,这时如果仍采用plot绘图,就会失去局部可视性,因此应采用对数坐标系进行绘图。 1.对数坐标系中图形绘制 例如,求0.01~100之间的常用对数(以10为底的对数),MATLAB程序...
  • 利用Matlab提取图片中曲线数据 线性修正 支持对数坐标
  • MATLAB双坐标轴的绘制

    千次阅读 2017-09-04 15:14:39
    matlab内双坐标轴绘制。
  • loglog:双对数刻度图 语法 loglog(X,Y) loglog(X,Y,LineSpec) loglog(X1,Y1,…,Xn,Yn) loglog(X1,Y1,LineSpec1,…,Xn,Yn,LineSpecn) 说明 loglog(X,Y) 在 x 和 y 上应用以 10 为底的对数刻度来绘制 x 和 y ...
  • Python绘制双对数曲线

    千次阅读 2019-07-03 10:20:15
    plt.loglog(x,Roxy,label=“Roxy”,color=‘r’,linewidth=1)#绘制双对数曲线 plt.gca().invert_xaxis()#x反转,大的值在前面,小的值在后面 import numpy as np import matplotlib.pyplot as plt def Draw(): x=...
  • python绘制y轴坐标轴的图

    千次阅读 2020-04-09 17:57:15
    -',color='orange',linewidth=0.5) labels = ax.get_yticklabels() [label.set_fontname('Verdana') for label in labels] #第二个坐标轴 ax2 = ax.twinx() ax2.plot(time, ranksum2, 'cv',markersize=10,...
  • 一、进阶绘图展示、 二、对数图、 1、logspace 函数、 2、semilogx 函数、 3、semilogy 函数、 4、loglog 函数、 5、代码示例、
  • 对数

    2019-09-05 17:20:29
    对数图分为双对数图和半对数图, 所谓双对数图是两个坐标轴都采用对数刻度,对应的函数 是 plt.loglog() ,半对数分为 plt.semilogx() 和 plt.semilogy() , 即一个坐标轴采用对数,另一个不采用 。 示例 : import ...
  • 文章目录极坐标半对数坐标双对数坐标双Y坐标 极坐标 polarplot(theta, rho, LineSpace) theta:相角 rho: 极径 Linespace:与plot类似。记不得就翻之前的文章 >>>th = 0:.01*pi:4*pi; r = abs(sin(th...
  • 10.12 特殊坐标轴绘图

    千次阅读 2016-12-17 18:07:20
    前面介绍了基本的二维绘图函数的使用,但其中无论是直角坐标...当然,也可以利用双坐标轴绘图,对指数数据进行局部放大,但这比较麻烦,MATLAB提供了更简便的方法来解决对数数据的问题,分别是semilogx函数、semilogy函

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,645
精华内容 2,258
关键字:

双对数坐标系