在python中绘制幂函数,但图形为空

在python中绘制幂函数,但图形为空,python,numpy,matplotlib,numbers,Python,Numpy,Matplotlib,Numbers,我试图绘制一个函数I=t^n的图形,这样在每30步间隔之后,n的值变成n/2,其中最初n=4。 运行代码时没有错误,但我没有得到任何图形 import matplotlib.pyplot as plt import numpy as np fig = plt.figure() n=4 for t in range (1,193): I=t**n if(t%30==0): n=n/2 plt.plot(t,I,'r') plt.xtick

我试图绘制一个函数I=t^n的图形,这样在每30步间隔之后,n的值变成n/2,其中最初n=4。 运行代码时没有错误,但我没有得到任何图形

import matplotlib.pyplot as plt 
import numpy as np

fig = plt.figure()

n=4
for t in range (1,193):
       I=t**n
       if(t%30==0):
           n=n/2

plt.plot(t,I,'r')

plt.xticks([0, 10, 41, 71, 101, 132, 163],
          ["Jan","Feb", "Mar", "Apr", "May", "June", "July"])
plt.xlabel('Months')
plt.ylabel('Cases')

plt.show() 

要修复代码,我认为您需要将
for
-循环中的值存储在一个列表中,并绘制该列表。不要在此行中取
t
I
的最后一个值:

plt.plot(t,I,'r')
尝试创建一个列表,将
I
中的值放入,并将该列表提供给
plt.plot
函数

这应该起作用:

导入matplotlib.pyplot作为plt
将numpy作为np导入
图=plt.图()
n=4
data=[]#为要附加到的数据创建一个列表
对于范围(1193)内的t:
I=t**n
如果(t%30==0):
n/=2
数据。追加(I)#将数据追加到列表中
plt.plot(data,'r')#绘制列表中的数据
plt.xticks([0,10,41,71,101,132,163],
[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”])
plt.xlabel(“月”)
plt.ylabel(“案例”)
plt.show()
这应给出以下曲线图:


代码的第一个问题是
^
运算符。 在Python中,它是XOR运算符,而我认为 需要电源操作员(
**

代码中的另一个缺陷是,当您想要创建绘图时,必须 组合x和y值,然后调用plt.plot传递这两个列表

但是您在循环中计算各自的值,并在 “单个”变量(不附加到数组)

需要纠正的另一点是t(一个包含x值的数组)可以 一次生成一个Numpy数组(t=np.arange(…),然后 根据t和n的当前值生成I(作为列表)

因此,请将代码更改为:

import numpy as np

n = 4
t = np.arange(1, 194)
I = []
for tt in t:
    I.append(tt ** n)
    if (tt % 30 == 0):
        n /= 2
plt.plot(t, I, 'r')
代码的其余部分-如您的帖子中所示

如果包含x个值的数组包含从 从0开始,可以调用plt.plot(I,'r'),省略t。 但是因为t是从1开始的,所以我不能这样做(会有 x轴上的“偏移1”)

编辑 为了得到半对数比例的图片,正如你在一篇评论中所写, 运行:


而不是
plt.plot(…)

您确定没有收到错误吗?在python3.8.5中,我得到了一个
TypeError:int和float不支持的操作数类型。实际上我已经上传了这个页面。请查查。嘿!非常感谢,但实际上n并不总是应该是int。我希望n的值是4,2,1,1/2,1/4。。。在覆盖整个范围之前,我认为它将是t**n而不是t^n@Additi.P我已经更新了答案来回答你的更新问题,非常感谢!得到了我想要的半对数比例的精确图表,多亏了洛蒂的支持,但这不算我的支持率,因为我的声誉不到15
plt.semilogy(t, I, 'r')