Python 如何在一个图形上绘制变化的线性方程(多个缝合在一起)

Python 如何在一个图形上绘制变化的线性方程(多个缝合在一起),python,Python,对于这个任务,我需要在一张图上显示几个线性方程,但是当到达x轴的一部分时,它必须改变所描绘的线性方程。我们不允许使用pylab和基本条件、数组、循环等之外的任何东西 已经尝试了几种方法,只需在图形上绘制每条线,这里的问题是这些线在不应该继续的时候继续。我似乎不能对每一行都设置限制。此外,我还尝试为x轴的每个部分创建一个循环,并为每个部分绘制不同的线,但收效甚微 STemp = ((-22/90)*latitude)+24 Depth = arange(0,2000,10) SSTemp = ST

对于这个任务,我需要在一张图上显示几个线性方程,但是当到达x轴的一部分时,它必须改变所描绘的线性方程。我们不允许使用pylab和基本条件、数组、循环等之外的任何东西

已经尝试了几种方法,只需在图形上绘制每条线,这里的问题是这些线在不应该继续的时候继续。我似乎不能对每一行都设置限制。此外,我还尝试为x轴的每个部分创建一个循环,并为每个部分绘制不同的线,但收效甚微

STemp = ((-22/90)*latitude)+24
Depth = arange(0,2000,10)
SSTemp = STemp*1+(0*Depth)
DTemp = 2*1+(0*Depth)
c = -((((2-STemp)/800)*200)-STemp)
TTemp = (((2-STemp)/800)*Depth)+c
xlabel("Depth (Meters)",fontsize="large")
ylabel("Temperature (\u00B0C)",fontsize="large")
title("Temperature of Water vs Depth",fontsize="large")
plot(Depth, TTemp, 'b-', linewidth = 2, label = 'Thermocline')
plot(Depth, DTemp, 'b-', linewidth = 2, label = 'Deep')
plot(Depth, SSTemp, 'b-', linewidth = 2, label = 'Surface')
grid(True)
show()


while Depth[0]:
    plot(Depth, SSTemp, 'b-', linewidth = 2, label = 'Surface')
while Depth[20]:
    plot(Depth, TTemp, 'b-', linewidth = 2, label = 'Thermocline')
while Depth[199]:
    plot(Depth, DTemp, 'b-', linewidth = 2, label = 'Deep')
show()
第一次尝试生成的图形包含所需的所有线,但运行时间太长(斜线用于连接两条线,而其他线不用于在交叉点之前继续)。
第二个甚至不再出现了。我已经尝试了很多东西,但是它丢失了大部分的原始代码。

这里是一个简短的脚本,可以解决您的障碍

  • 导入
    pylab
    ,获取x轴上的点(我更喜欢
    linspace
    保留两个端点,您使用了
    arange
    ,但基本上是相同的)

  • 要定义线性函数,请使用
    ,其中
    ,其参数在此应用中是一个条件和两个表达式,
    y?
    的值是条件为真的第一个表达式,条件为假的第二个表达式。
    另一点是使用了
    NaN
    (不是数字),这是未定义数值表达式(例如,
    0/0
    )结果的Python表示,我们之所以使用它,是因为在打印上下文中会导致线中缺少一个点。
    假设y=2x+5表示x5,在代码中,使用
    where
    NaN

    y1 = where(x<=5, 2*x+5, NaN)  
    y2 = where(x< 5, NaN, 15.)
    
  • 哎呀,我忘了提到你可以把
    where
    s连接起来,例如

    from pylab import * 
    x = linspace(0,10,101) 
    x1, x2 = 4, 6 
    y1 = where(x<=x1, 2*x+2, NaN) 
    y2 = where(x< x1, NaN, where(x<=x2, 10, NaN)) 
    y3 = where(x< x2, NaN, 22-2*x) 
    for y, label in ((y1,'$y=2x+2$'), (y2,'$y=10$'), (y3,'$y=22-2x$')): 
        plot(x, y, label=label) 
    ylim((-0.2, 10.2)) ; legend() ; grid() ; show()                                  
    
    从pylab导入*
    x=linspace(0,10101)
    x1,x2=4,6
    y1=其中(x
    
    plot(x,y1,label='linear')
    plot(x,y2,label='constant')
    legend() ; grid() ; show()
    
    from pylab import * 
    x = linspace(0,10,101) 
    x1, x2 = 4, 6 
    y1 = where(x<=x1, 2*x+2, NaN) 
    y2 = where(x< x1, NaN, where(x<=x2, 10, NaN)) 
    y3 = where(x< x2, NaN, 22-2*x) 
    for y, label in ((y1,'$y=2x+2$'), (y2,'$y=10$'), (y3,'$y=22-2x$')): 
        plot(x, y, label=label) 
    ylim((-0.2, 10.2)) ; legend() ; grid() ; show()