【问题标题】:Trouble with generating graph from function in python从python中的函数生成图形的问题
【发布时间】:2017-07-21 08:16:37
【问题描述】:

我想生成温度与功率的折线图,并编写了以下代码:

import numpy as np 
import matplotlib.pyplot as plt

temps = np.arange(288, 314, 1)

sigma = 5.67e-8 #Stefan's constant, units = W m^-2 K^-4
T0 = 298 #ambient T, 25 degrees
emissivity = 0.96
A = (np.pi * 309)/80000 #total surface area of chameleon

def SB(T):
    power = A * sigma * emissivity * (T**4 - T0**4)
    return power

power = SB(temps)

plt.plot(temps, power)
plt.xlabel("Temperature (K)")
plt.ylabel("Power (W $m^{-2}$)")
plt.title("Net Power Radiated vs T")
plt.xlim(288, 314)
plt.ylim(0, 1.2)
plt.show()

轴正在显示,但我没有得到一条线,可能是因为该函数没有从 np.arange 中获取值吗?如果是这样,我将如何解决这个问题?任何帮助,将不胜感激! :D

雷切尔

【问题讨论】:

  • 嗯,我复制并粘贴了你的代码,它正在绘制一条线。
  • 您是否在交互式会话中编码?也许重新启动解释器。
  • @juanpa.arrivillaga 我在 Spyder 工作,但已经重新启动它并在另一个解释器中尝试过它现在说“RuntimeWarning:power遇到无效值”:/
  • 等等。你在使用 Python 2 吗?
  • @juanpa.arrivillaga,是的,我认为是 Python 2.7,不知道两者之间的巨大差异哈哈

标签: python function numpy matplotlib


【解决方案1】:

这是一个有趣的错误。首先,您看不到这条线,因为它超出了ylim 范围。删除设置ylim的代码行,你会看到该行。

但是该行显示负值 - 这很奇怪,因为功率应该是正的并且公式是正确的。
原因是输入温度数组temps 是一个int32 数组。这个数组的四次方会给出负值,因为数字太大了。

使用浮点数组的解决方案。要么使用

temps = np.arange(288., 314., 1)

temps = np.arange(288, 314, 1).astype(np.float32)


这是在 Windows 8 64 位上使用 python 2.7 和 numpy 1.12 复制的。在this question 中可以看到这种奇怪行为的原因:“在 Microsoft C 中,即使在 64 位系统上,long int 数据类型的大小也是 32 位。”

【讨论】:

  • 啊,我想可能是这样。在我的系统上,temp 是 dtype('int64')。这取决于您系统上的C int
  • 知道为什么会有不同吗?是python版、numpy版、操作系统吗?
  • 这取决于你的系统架构(对我来说,我在 x86_64 上)
  • 不幸的是,实际上,这取决于您的操作系统。但它是您系统上的任何 C long
  • 我认为this question 提供了答案:“在 Microsoft C 中,即使在 64 位系统上,long int 数据类型的大小也是 32 位。”
猜你喜欢
  • 1970-01-01
  • 2020-07-15
  • 2017-03-03
  • 1970-01-01
  • 2018-04-26
  • 2021-12-26
  • 2020-12-02
  • 1970-01-01
相关资源
最近更新 更多