精华内容
下载资源
问答
  • fill_between和fill_betweenx函数的作用都是填充两条曲线之间的区域。其中 fill_between函数作用是填充两条水平曲线之间的区域。 fill_betweenx函数作用是填充两条垂直曲线之间的区域。 两者参数非常相似,仅数据...

    概述

    fill_betweenfill_betweenx函数的作用都是填充两条曲线之间的区域。其中

    • fill_between函数作用是填充两条水平曲线之间的区域。
    • fill_betweenx函数作用是填充两条垂直曲线之间的区域。

    两者参数非常相似,仅数据参数的名称、含义稍有不同。
    fill_between函数的签名为:matplotlib.pyplot.fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs)
    fill_betweenx函数的签名为:matplotlib.pyplot.fill_betweenx(y, x1, x2=0, where=None , interpolate=False,step=None,*, data=None, **kwargs)

    fill_between函数

    fill_between函数的签名为:matplotlib.pyplot.fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs)

    参数说明如下:

    • x:定义两条曲线的节点的x坐标。长度为N的类数组结构。必备参数。
    • y1:定义曲线的节点的y坐标。长度为N的类数组结构或者标量。必备参数。
    • y2:定义第2条曲线的节点的y坐标。长度为N的类数组结构或者标量,默认值为0。可选参数。
    • where:根据条件排除一些填充区域。长度为N的布尔数组。默认值为None。可选参数。
    • interpolate:当该属性为True时将计算实际交点,并将填充区域延伸到此点。布尔值。默认值为False。注意:该属性只有使用了where属性且两条曲线相互交叉时才生效。
    • step:拐点的计算方式。字符串,取值范围为{'pre', 'post', 'mid'}。默认值为None。可选参数。
    • **kwargsPolyCollection对象的相关属性。

    fill_between函数的返回值为PolyCollection对象。

    注意事项:
    建议xy1y2使用数组结构,这样where参数的应用更加灵活。
    两条曲线分别由(x,y1)(x,y2)定义。两条曲线具有相同的x坐标。
    两个曲线之间的填充区域可能有多个。
    通过where参数可以排除一些填充区域。
    默认直接连接给定点构成曲线。可以使用step函数改变连接点。

    案例:演示fill_between的基本用法

    在这里插入图片描述

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.family']='simhei'
    plt.rcParams['axes.unicode_minus']=False
    
    # 构造x坐标
    x = np.arange(0.0, 2, 0.01)
    # 构造y1曲线的y坐标
    y1 = np.sin(2 * np.pi * x)
    # 构造y2曲线的y坐标
    y2 = 0.8 * np.sin(4 * np.pi * x)
    
    fig, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True, figsize=(6, 6))
    # 参数y2 默认值为0
    ax1.fill_between(x, y1)
    ax1.set_title('填充y1与0之间的区域')
    # 参数y2 的值为标量1
    ax2.fill_between(x, y1, 1)
    ax2.set_title('填充y1与0之间的区域')
    
    ax3.fill_between(x, y1, y2)
    ax3.set_title('填充y1与y2之间的区域')
    ax3.set_xlabel('x')
    
    plt.show()
    

    案例:置信带

    在这里插入图片描述

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.family']='simhei'
    plt.rcParams['axes.unicode_minus']=False
    
    x = np.linspace(0, 10, 11)
    y = [3.9, 4.4, 10.8, 10.3, 11.2, 13.1, 14.1,  9.9, 13.9, 15.1, 12.5]
    
    # 拟合曲线,并估计其y值及误差。
    a, b = np.polyfit(x, y, deg=1)
    y_est = a * x + b
    y_err = x.std() * np.sqrt(1/len(x) +
                              (x - x.mean())**2 / np.sum((x - x.mean())**2))
    
    # 绘制拟合线
    plt.plot(x, y_est, '-')
    # 填充置信带
    plt.fill_between(x, y_est - y_err, y_est + y_err, alpha=0.2)
    # 绘制数据点
    plt.plot(x, y, 'o', color='tab:brown')
    plt.show()
    

    案例:演示interpolation参数

    在这里插入图片描述

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.family']='simhei'
    plt.rcParams['axes.unicode_minus']=False
    
    x = np.array([0, 1, 2, 3])
    y1 = np.array([0.8, 0.8, 0.2, 0.2])
    y2 = np.array([0, 0, 1, 1])
    
    plt.subplot(211)
    plt.title('interpolation=False')
    # 绘制两条曲线
    plt.plot(x, y1, 'o--')
    plt.plot(x, y2, 'o--')
    # 绘制曲线间填充
    plt.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3)
    plt.fill_between(x, y1, y2, where=(y1 < y2), color='C1', alpha=0.3)
    
    plt.subplot(212)
    plt.title('interpolation=True')
    # 绘制两条曲线
    plt.plot(x, y1, 'o--')
    plt.plot(x, y2, 'o--')
    # 绘制曲线间填充
    plt.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3,
                     interpolate=True)
    plt.fill_between(x, y1, y2, where=(y1 <= y2), color='C1', alpha=0.3,
                     interpolate=True)
    
    plt.tight_layout()
    plt.show()
    

    案例:演示where参数

    在这里插入图片描述

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.family']='simhei'
    plt.rcParams['axes.unicode_minus']=False
    
    x = np.arange(-5, 5, 0.01)
    y1 = -5*x*x + x + 10
    y2 = 5*x*x + x
    
    
    plt.plot(x, y1, x, y2, color='black')
    plt.fill_between(x, y1, y2, where=(y2 > y1), facecolor='yellow', alpha=0.5)
    plt.fill_between(x, y1, y2, where=(y2 <= y1), facecolor='red', alpha=0.5)
    plt.title('Fill Between')
    plt.show()
    
    展开全文
  • matplotlib中求两条曲线的交点

    千次阅读 2019-02-18 15:31:23
    最近在工作中算法中遇到求两条曲线的交点的问题,开始在网上找了良久没找到什么可用的办法,后来自己就在再就在纸上画,发现一个简单的算法可以求出这些交点来。看下图就知道了, 就是按照几何来计算比例: 具体...

    最近在工作中算法中遇到求两条曲线的交点的问题,开始在网上找了良久没找到什么可用的办法,后来自己就在再就在纸上画,发现一个简单的算法可以求出这些交点来。看下图就知道了,
    在这里插入图片描述
    就是按照几何来计算比例:
    具体代码如下:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x1 = np.array([712,653,625,605,617,635,677,762,800,872,947,1025,1111,1218,1309, 500])
    y1 = np.array([2022,1876,1710,1544,1347,1309,1025,995,850,723,705,710,761,873,1050, 2000])
    
    x_start = np.min(x1)
    x_end = np.max(x1)+1
    
    x_line = x1.copy()
    y_line = x_line * 0.9 + 500
    
    y=y1-y_line
    nLen=len(x1)
    xzero=np.zeros((nLen,))
    yzero=np.zeros((nLen,))
    for i in range(nLen-1):
        if np.dot(y[i], y[i+1]) == 0:#   %等于0的情况
            if y[i]==0:
                xzero[i]=i
                yzero[i]=0
            if y[i+1] == 0:
                xzero[i+1]=i+1
                yzero[i+1]=0
        elif np.dot(y[i],y[i+1]) < 0:# %一定有交点,用一次插值
            yzero[i] = np.dot(abs(y[i]) * y_line[i+1] + abs(y[i+1])*y_line[i], 1/(abs(y[i+1])+abs(y[i])))
            xzero[i] = (yzero[i]-500)/0.9
        else:
            pass            
    
    for i in range(nLen):
        if xzero[i]==0 and (yzero[i]==0):#     %除掉不是交点的部分
            xzero[i]=np.nan
            yzero[i]=np.nan
    
    print(xzero)
    print(yzero)
    
    plt.plot(x1, y1, 'o-')
    plt.plot(x_line,y_line,xzero,yzero,'o')
    plt.show()
    

    结果如下:
    在这里插入图片描述

    展开全文
  • import matplotlib.pyplot as plt import pandas as pd from matplotlib.pyplot import MultipleLocator plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=...
    1. 调用Python包
    import matplotlib.pyplot as plt
    import pandas as pd
    from matplotlib.pyplot import MultipleLocator
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    1. 造数-DataFrame
    df = pd.DataFrame([['2010','aa',200,20],['2011','aa',210,30],['2012','aa',230,70],['2013','aa',260,20],['2014','aa',270,80],['2015','aa',200,20],
                       ['2010','bb',250,25],['2011','bb',280,65],['2012','bb',290,35],['2013','bb',650,85],['2014','bb',350,95],['2015','bb',250,55],
                       ['2010','cc',300,30],['2011','cc',380,33],['2012','cc',340,70],['2013','cc',380,80],['2014','cc',390,90],['2015','cc',300,30],
                       ['2010','dd',400,40],['2011','dd',430,50],['2012','dd',420,80],['2013','dd',470,50],['2014','dd',420,70],['2015','dd',490,40],
                       ['2010','ee',550,55],['2011','ee',560,85],['2012','ee',590,55],['2013','ee',590,65],['2014','ee',550,85],['2015','ee',570,55],
                       ['2010','ff',600,60],['2011','ff',670,40],['2012','ff',660,70],['2013','ff',630,90],['2014','ff',680,80],['2015','ff',620,60]
                      ],columns=['报表日期','股票名称','市值','FCFF'])
    df['报表日期']=df['报表日期'].apply(int)
    print(df)
    

    在这里插入图片描述

    1. 不同指标全部画在一张图上
    fig, ax = plt.subplots()
    h,l = ax.get_legend_handles_labels()
    for i in df['股票名称'].unique():
        df[df['股票名称']==i].groupby('股票名称').plot('报表日期','市值',ax=ax,figsize=(16, 10),label='%s_市值'%i)
        df[df['股票名称']==i].groupby('股票名称').plot('报表日期','FCFF',ax=ax,figsize=(16, 10),label='%s_FCFF'%i,linestyle='-.')
    #     sub_data[sub_data['股票名称']==i].groupby('股票名称').plot('报表日期','DebtRatioWithoutR&D',ax=ax,figsize=(16, 10),label='%s_D/E'%i,linestyle='-')
        
    
    x_major_locator=MultipleLocator(1.0)
    y_major_locator=MultipleLocator(50)
    ax=plt.gca()
    ax.xaxis.set_major_locator(x_major_locator)
    ax.yaxis.set_major_locator(y_major_locator)
    plt.legend(fontsize=12)
    plt.axis([2010, 2015, 10, 700])
    plt.show()
    

    效果如下:
    在这里插入图片描述
    PS:如果图例挡住折线了,调整一下图片尺寸或横纵坐标的范围即可。

    1. 或者按股票名称分别画对应指标
    for i in df['股票名称'].unique():
        x_major_locator=MultipleLocator(1.0)
        y_major_locator=MultipleLocator(50)
        ax=plt.gca()
        ax.xaxis.set_major_locator(x_major_locator)
        ax.yaxis.set_major_locator(y_major_locator)
    #     plt.legend(fontsize=12)
        plt.axis([2010, 2015, 10, 700])
        df[df['股票名称']==i].groupby('股票名称').plot('报表日期',['市值','FCFF'],figsize=(6, 4),label=['%s_市值'%i,'%s_FCFF'%i])
    

    效果如下(按股票名称画出多张图):
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    转载请附出处,谢谢。

    展开全文
  • 很多时候需要在程序运行过程...本文总结了几种方法实现在程序运行中绘制动态图的方法,以画动态正弦曲线为例。 第一种方法:plt.show()放在程序最后 既然plt.show会阻塞后面的程序,那么就把plt.show放在程序最后。另外
  • 使用matplotlib在一张图上画多条曲线

    万次阅读 2020-03-21 21:59:50
    做数据分析,还有机器学习的收敛性,准确性分析时,往往需要将一些数据图形化,以曲线的形式显示出来,下面就介绍种方式来实现这个小问题,一种是object-oriented面向对象的,另一种是基于plt的。 下面这个方式是...

    做数据分析,还有机器学习的收敛性,准确性分析时,往往需要将一些数据图形化,以曲线的形式显示出来,下面就介绍两种方式来实现这个小问题,一种是object-oriented面向对象的,另一种是基于plt的。

    下面这个方式是面向对象的方式:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.linspace(0,2,100)
    fig,ax = plt.subplots()
    ax.plot(x,x,label='linear')
    ax.plot(x,x**2,label='quadratic')
    ax.plot(x,x**3,label='cubic')
    ax.set_xlabel('x label')
    ax.set_ylabel('y label')
    ax.set_title('simple plot')
    ax.legend()
    plt.show()
    
    将图形中的每个元素进行定义,然后组建成一个整体图像,是基于对象的。

    上面的代码产生的图形如下图所示:

     

     

    另一种是完全给予plt的代码,如下所示:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.linspace(0,2,100)
    
    plt.plot(x,x,label='linear')
    plt.plot(x,x**2,label='quadratic')
    plt.plot(x,x**3,label='cubic')
    plt.xlabel('x label')
    plt.xlabel('y label')
    plt.title('simple plot')
    plt.legend()
    plt.show()
    

    两种方式产生的图是一样的。

    那么为什么要将上述两种代码分为面向对象和基于plt的呢,是由于matplotlib做出的图的每一个部分都可以看做一个独立的对象,比如坐标轴,坐标轴的刻度,坐标轴的名称,这个图的标题等等,下面的这个图可以很好的说明这个问题,因为已经将每一个部分分别标出来了。

    展开全文
  • 我有两条曲线的x和y值列表,它们都有奇怪的形状,而且我没有任何函数。我需要做两件事:(1)绘制它并对曲线之间的区域进行着色,如下图所示;(2)找到曲线之间该着色区域的总面积。在matplotlib中,我可以用fill-...
  • matplotlib画图时,常常需要实现类功能,一类是在一个坐标轴上画多条曲线,能够清楚地看到多条曲线的对比情况。另一种情况是在同一个窗口的不同子图上画图,多用于呈现不同内容的曲线,没有对比关系的曲线图。...
  • matplotlib.pyplot绘制图像之同一图中多条曲线对比

    万次阅读 多人点赞 2018-11-07 16:41:45
    绘制sinx和cosx # -*- coding:utf-8 -*- ...import matplotlib.pyplot as plt x = np.linspace(0, 2 * (np.pi)) #numpy.linspace(开始,终值(含终值)),个数) y1 = np.sin(x) y2 = np.cos(x) #画图 plt.title('C...
  • 使用函数:matplotlib.pyplot.fill_between —...参考:使用matplotlib绘制填充的曲线图_buxucixingztx的博客-CSDN博客_matplotlib画填充图 matplotlib 实现区域颜色填充_szfhy的博客-CSDN博客_matplotlib填充颜色 ...
  • matplotlib画多条曲线

    千次阅读 2017-08-23 09:52:01
    plot(self, *args, **kwargs) def plot(self,ax,ay,colour): ”’#最常用的绘图命令plot, ”’self.axes.grid()self.axes.plot(ax,ay,colour) ...plot(x1, y1, x2, y2, antialised=False) ##画多条曲线 plot
  • 对类似问题有一些先前的答案(例如...由于个原因,这不太理想:>轴的背景不能是透明的,因为它上面有一个填充的多边形> pcolormesh绘制速度相当慢,并且不能平滑插值.这是一个更多的工作,但有一种方法可以更快地...
  • 如果你需要同一条曲线根据不同部位选择不同的颜色来显示,那么就需要看一下这个例子。如下图: 这个图里,每条曲线根据曲线的导数来选择不同的颜色显示,相同导数,也就是说明相同的曲率部分就会是一样的颜色。 ...
  • 使用matplotlib绘制正弦曲线

    千次阅读 2020-12-03 13:02:13
    我们都知道matplotlib是一个优秀的作图工具,那下面我们就用这个模块来画一下正弦曲线的图 from matplotlib import pyplot as plt import numpy as np x=np.linspace(-3,3,100)#X的范围位于【-3,3】 y=np.sin(np.pi...
  • 在上一篇中,本人片面的认为问题解决了,后来认真一看曲线确实同步了,可是横坐标惨不忍睹,如下图所示: 认为是下面这设置横坐标label 位置的问题,实际上经过测试将这句位置上调整到ax2=axs.twinx() 之前,...
  • 函数只被其名称引用。就Python而言,使用不同的输入参数集并不能使它...在解决此问题的最简单方法是为函数指定不同的名称:import sympy as syimport numpy as npimport matplotlib.pyplot as pltx, z, w, a0, a1, ...
  • python-matplotlib 绘制函数曲线

    千次阅读 2021-10-07 10:24:41
    笔记一、先画线1.plt.plot() 函数1.1plt.plot(x, y, "格式控制字符串")1.2示例二、画个函数曲线1.Python math库常用函数2.np.arange() 函数三、图,坐标系,曲线1.同一张图,同一坐标系,画多个曲线2.同一张图,...
  • 在import pandas as pdimport numpy as npfrom scipy import optimizefrom scipy import interpolateimport matplotlib.pyplot as pltdef find_intersections(x1, y1, x2, y2):x1 = np.asarray(x1)y1 = np.asarray...
  • matplotlib画PR曲线

    千次阅读 2019-01-03 23:35:57
    import matplotlib as plt 然后以VOC为例,画PR曲线: def _do_python_eval(self, output_dir='output'): #rootpath = os.path.join(self.root, 'VOC' + self._year) rootpath = '/data/Datasets/l...
  • matplotlib.pyplot
  • matplotlib 绘制多个子图,多条曲线

    千次阅读 2020-02-12 17:53:46
    matplotlib 中,一个figure即为一个画板,用plt.figure()创建一个新画板,如果只有一个画板的话这句可以省略。 #创建第一个视图(画板) plt.figure(1) #第一个画板的内容 #… #创建第二个视图(画板) plt.figure...
  • 在许多情况下,来自其他答案的解决...更好的解决方案是使用专门设计的ConnectionPatch:import matplotlib.pyplot as pltfrom matplotlib.patches import ConnectionPatchimport numpy as npfig = plt.figure(figsiz...
  • Matplotlib——在一张图内绘制多条曲线

    千次阅读 多人点赞 2020-07-24 16:25:38
    Matplotlib.pyplot import matplotlib.pyplot as plt 2.绘制一张空白图 fig, ax = plt.subplots() plt.subplots()的作用是创建一个图或者一组子图返回值是Figure,axes.Axes。此处代码中 fig = Figure ax = axes....
  • 前面学习了怎么样显示一条简单的数学曲线,是最简单的方式,也是最基本的...要显示多条曲线,首先要有多条曲线的数据,在这里使用下面的代码来构造两条曲线的数据: x = [20, 40, 60, 80, 100, 120, 140] y1 = [30.
  • 所有数组的长度相同,但x1和x2包含不同的值.plt.fill_between(x,y1,y2)要求两条曲线共享相同的x数组.我怎么做像fill_between(x1,x2,y2)这​​样的东西?例如,如果:x1 = np.array([1.0,2.0,3.0,4.0,5.0])和y1 = np....
  • pandas的Series和DataFrame结构的plot()方法可以自动调用matplotlib的功能进行绘图,在数据分析和处理时可以很方便地进行可视化。例如下面的代码: 代码运行结果如下图: Python学习...
  • matplotlib在一张图中画两条线

    千次阅读 2021-08-22 09:45:50
    许多场合下,我们需要将两条甚至多条曲线放置在一张图中进行对比,matplotlib可以轻松实现该要求。 完整代码如下: import matplotlib.pyplot as plt import numpy as np data = np.arange(0,1,0.01) #伪造从0到1以...
  • matplotlib 画图,实现多个曲线颜色控制 由于需要设置曲线的颜色和控制按钮的颜色一致。完成之后,自己学习记录如下 准备1 在Qtdesigner 中设置QSS 选择需要编辑的按键,右键-> 编辑样式表,如下所示。选择添加...
  • 如果想要在python中画点间的曲线或是带箭头的曲线可以用下面的方式来画: import matplotlib.pyplot as plt plt.figure(figsize=(3.2, 2)) ax = plt.subplot(1,1,1) ax.annotate("", xy=(0.2, 0.2), ...
  • 一、项目背景:看了matplotlib for python developers这本书,基本掌握了在pyqt中显示曲线的做法,于是自己写一个。二、需求描述:1)X轴显示时间点,显示长度为1分钟,每一秒钟绘制一个点,X轴长度超过1分钟,则...
  • 所谓极大值是指函数在某个子区间里的最大值(例如比两侧紧邻的个值都大的值),也称局部最大值;极小值是指函数在某个子区间里的最小值(例如比两侧紧邻的个值都小的值),也称局部最小值。极.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,198
精华内容 4,079
关键字:

matplotlib两条曲线