Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用matplotlib和numpy绘制方程式_Python_Python 3.x_Numpy_Matplotlib - Fatal编程技术网

Python 使用matplotlib和numpy绘制方程式

Python 使用matplotlib和numpy绘制方程式,python,python-3.x,numpy,matplotlib,Python,Python 3.x,Numpy,Matplotlib,我想画一个等式,x轴表示时间t,y轴表示变量n。现在,n的公式是n=((np.log(t)*10**6)/np.log(2))+1,我的图表上的最大时间是自大爆炸理论以来的时间,单位为秒,即4.35 x 10**17秒 我试过这个: import matplotlib.pyplot as plt import numpy as np def graph(formula, x_range): y = np.array(x_range) x = eval(formula)

我想画一个等式,
x
轴表示时间
t
y
轴表示变量
n
。现在,
n
的公式是
n=((np.log(t)*10**6)/np.log(2))+1
,我的图表上的最大时间是自大爆炸理论以来的时间,单位为秒,即
4.35 x 10**17秒

我试过这个:

import matplotlib.pyplot as plt
import numpy as np

def graph(formula, x_range):  
    y = np.array(x_range)  
    x = eval(formula)
    plt.plot(x,y)  
    plt.show() 

graph(((np.log(x)*10**6)/np.log(2)) + 1, range(0, 4.35*10**17 ))

这似乎不起作用。关于如何实现这一点,有什么想法吗?

这里有几个问题:

  • 范围应定义为整数上的
  • 该范围将生成的项目数量太大,您必须采取巨大的步骤
  • 该公式将
    x
    作为变量,但您似乎在
    y
    中定义了
    np.array(x_范围)
    ;更重要的是
  • 您使用
    eval(…)
    ,但
    eval(…)
    通常是一个字符串或另一个可以解析的对象
  • 您没有给
    graph(..)
    一个公式作为第一个元素:在Python调用
    graph(..)
    之前,它首先计算操作数
在我看来,实现这一点的最佳方法是使用lambda表达式:

导入matplotlib.pyplot作为plt
将numpy作为np导入
def图(公式,x_范围):
x=np.数组(x_范围)
#^使用x作为范围变量
y=公式(x)
#^^使用x调用lambda表达式
#|使用y作为函数结果
平面图(x,y)
plt.show()
图(λx:((np.log(x)*10**6)/np.log(2))+1,范围(0435*10**15,10**12))
#^使用lambda表达式^整数范围
#迈出巨大的步伐
这将生成以下图像:

编辑

根据您希望y轴上的时间和x轴上的函数的注释,只需将
分配给其他变量,如:

import matplotlib.pyplot as plt
import numpy as np

def graph(formula, x_range):  
    y = np.array(x_range)
    x = formula(y)
    plt.plot(x,y)  
    plt.show() 

graph(lambda x : ((np.log(x)*10**6)/np.log(2)) + 1, range(0,435*10**15,10**12))
导入matplotlib.pyplot作为plt
将numpy作为np导入
def图(公式,x_范围):
y=np.数组(x_范围)
x=公式(y)
平面图(x,y)
plt.show()
图(λx:((np.log(x)*10**6)/np.log(2))+1,范围(0435*10**15,10**12))

请注意,您不需要更改lambda表达式中变量的名称:实际上,当您调用lambda表达式时,本地
x
将只是调用者的
y

eval
字符串上工作。尽管如此,它还是不被认为是非常优雅的。自从大爆炸理论以来,现在的时间最长为90000秒。大爆炸后的时间可能要大得多。我意识到时间
t
y
轴上可能更有意义。您如何翻转它,使时间位于
y
轴上,而n位于
x
轴上。@WasswaSamuel:在函数的赋值中,只需重命名
x
y
y
x
。将编辑答案。
import matplotlib.pyplot as plt
import numpy as np

def graph(formula, x_range):  
    y = np.array(x_range)
    x = formula(y)
    plt.plot(x,y)  
    plt.show() 

graph(lambda x : ((np.log(x)*10**6)/np.log(2)) + 1, range(0,435*10**15,10**12))