在对数轴中以不同间隔(python)绘制多个函数

问题描述 投票:0回答:2

我试图在 python 中的双对数刻度上针对 x 范围的三个区间绘制 3 个不同的函数。附上我想要创建的绘图类型的图像以及哪些函数 y,对于 x 的间隔。 enter image description here

我的代码尝试如下。也许我把它复杂化了。

import math as m
import numpy as np
import pylab as pl 
import matplotlib.pyplot as plt
x = np.arange(100)  # this gives `array([0, 1, 2, ..., 9])`
y = np.arange(100)

for i in range (-50,20):
   if x[i] < -43:
      y[i] = m.log10((10**x[i])/(10**-43))**(1/2)
   if x[i] >  -43 and x[i] < -40:
      y[i] = m.log10(np.exp((10**36)((10**x[i])-(10**-43))))
   if x[i] >-40:
      y[i] = m.log10((np.exp((10**36)((10**-40) - (10**-43)))(((10**x[i])/(10**-43))**(1/2)))
   #i+=1


pl.plot(x,y)
#pl.xlim([-100.,100.])
#pl.ylim([-100.,100.]) 
pl.xlabel('log x')
pl.ylabel('log y')
pl.show()


请注意: 在 @Sembei 的帮助下更新了代码,该代码有效,但下面还有关于颜色的进一步问题:

import matplotlib.pyplot as plt
x = np.linspace(-50,23,500)
y = []

for xval in x:
    if xval < -36:
        y.append(m.log10(((10**xval)/(10**-36))**(1/2)))
    elif -36 <= xval <= -34:
        y.append(m.log10(np.exp((10**36)*((10**xval)-(10**-36)))))
    else:
        y.append(m.log10((np.exp((10**36)*((10**-34) - (10**-36)))*(((10**xval)/(10**-36))**(1/2)))))
       
plt.plot(x,y)
pl.xlim([-44.,-30.])
#pl.ylim([-10.,20.]) 
pl.xlabel('log x')
pl.ylabel('log y')
plt.show()

进一步问题: 如何为 3 个 x 间隔的不同 y 函数设置 3 种不同的颜色? 任何帮助表示赞赏。谢谢!

python numpy plot curve loglog
2个回答
2
投票

你可以这样做:

x = range(-50,23)
y = []

for xval in x:
   if xval < -43:
       y.append(-43) #your function in this interval
   elif -43 <= xval <= -40:
       y.append(xval) #your function in this interval)
   else:
       y.append(-40) #your function in this interval)

plt.plot(x,y, '.-')
plt.xlabel('log x')
plt.ylabel('log y')
plt.show()

您只需使用正确的语法填充

#your function in this interval
(请注意,在您的语法中缺少乘积运算符 *)

这里我使用 y 作为列表并附加值。您还可以将 y 初始化为全零并根据索引分配值。为此,您需要在循环中包含一个

enumerate
,它将为您提供 y 的索引,您必须在其中放置值。

注意:这里,

range
一步步进行。如果您想要更高的分辨率,您可能需要使用np.linspace,这样您就可以控制函数的分辨率。

编辑:我放置了该函数的一些玩具定义,以便您可以看到它是如何工作的。现在只需将我的函数定义更改为您自己的即可

enter image description here


0
投票

如果您想在不同的时间间隔使用不同的颜色,这是一种可行的方法。具有独立 x 向量的三个图。

import matplotlib.pyplot as plt
import numpy as np

x1 = np.linspace(-50,-36,50)
x2 = np.linspace(-36, -34 ,10)
x3 = np.linspace(-34, 20, 100)

y1 = []
y2 = []
y3 = []

for xval in x1:
    y1.append(np.log10(((10**xval)/(10**-36))**(1/2)))
for xval in x2:
    y2.append(np.log10(np.exp((10**36)*((10**xval)-(10**-36)))))
for xval in x3:
    y3.append(np.log10((np.exp((10**36)*((10**-34) - (10**-36)))*(((10**xval)/(10**-36))**(1/2)))))
   
plt.plot(x1,y1, color='r')
plt.plot(x2,y2, color='b')
plt.plot(x3,y3, color='g')
plt.xlabel('log x')
plt.ylabel('log y')
plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.