在 Matplotlib 上绘图时出现问题

Problems while plotting on Matplotlib

我在创建函数的基本绘图时使用 python matplotlib 时遇到问题,在 wolfram alpha 和其他绘图引擎中,最终绘图似乎与我通过创建的绘图非常不同matplotlib.

我遵循了 matplotlib 中的示例,我只是将 np.sin(x) 函数替换为我需要绘制的函数。

我正在使用几个函数,所以这是我需要绘制的第一个函数,但它根本不起作用。

这是我正在使用的代码和前面的情节比较。

__author__ = 'alberto'
#
import numpy 
import matplotlib.pyplot as plt
#
x = numpy.arange(-20, 20, 0.1)
y = ((3*x**2) + 12/(x**3) - 5)
plt.plot(x, y)
plt.show()

Wolfram

Matplotlib.

我正在使用 Anaconda Python(2.7.8)。

祝你有美好的一天!!!

您必须手动限制垂直尺寸! 这是一个可能的解决方案:

import numpy 
import matplotlib.pyplot as plt

x = numpy.arange(-20, 20, 0.1)
y = ((3*x**2) + 12/(x**3) - 5)
plt.plot(x, y)
plt.ylim(-50, 100)
plt.show()

注意plt.ylim函数!

如果您查看轴标签,您会发现 matplotlib 向您显示的视图 window 比 Wolfram Alpha 大得多。 Wolfram alpha 大致向您显示 -4 <= x <= 4-50 <= y <= 100,但 matplotlib 向您显示 -20 <= x <= 20 和巨大的 y 限制。

要获得可比较的图表,请设置视图限制:

plt.xlim(-4, 4)
plt.ylim(-50, 100)

您可以通过将 nan 分配给极值来调用 plt.plot 生成两条断开连接的曲线(从而处理渐近线)。 Mathematica 会自动为您处理; matplotlib 需要你做一些工作:

import numpy  as np
import matplotlib.pyplot as plt

x = np.linspace(-20, 20, 1000)
y = ((3*x**2) + 12/(x**3) - 5)
mask = np.abs(y) > 100
y[mask] = np.nan
plt.plot(x, y)
plt.grid()
plt.show()

产量