Matplotlib: 绘制离散值

5
我正在尝试绘制以下内容!
from numpy import *
from pylab import *
import random

for x in range(1,500):
    y = random.randint(1,25000)
    print(x,y)   
    plot(x,y)

show()

然而,我一直得到一个空白的图形(?)。为了确保程序逻辑正确,我添加了代码print(x,y),只是确认(x,y)对正在生成。

(x,y)对正在生成,但没有绘图,我一直得到一个空白的图形。

有什么帮助吗?


Arkapravo,我对被接受的答案没有任何问题;我只是想提一下这个五行代码模板:from matplotlib import pyplot as PLT; fig=PLT.figure(); ax1=fig.add_subplot(111); ax1.plot(x, y); PLT.show(),它是一个快速获取工作中x-y图的方法,几乎有98%的成功率。 (顺便说一下,'x','y'是列表或1D Numpy数组)。 - doug
1
@doug:你可以用更简单的方式实现同样的效果:from matplotlib import pyplot as plt; plt.plot(x, y); plt.show() - Eric O. Lebigot
@doug:谢谢!...我接受了Daniel G的答案,因为它立即解决了我所有的问题!.... :) .. 很遗憾不能选择2个答案! - Arkapravo
1个回答

5

首先,有时候我通过执行以下操作取得更好的成功:

from matplotlib import pyplot

不要使用pylab,虽然在这种情况下不应该有任何影响。

我认为你实际的问题可能是点被绘制了但是不可见。通过使用列表一次性绘制所有点可能会更好:

xPoints = []
yPoints = []
for x in range(1,500):
    y = random.randint(1,25000)
    xPoints.append(x)
    yPoints.append(y)
pyplot.plot(xPoints, yPoints)
pyplot.show()

为了使这更加简洁,您可以使用生成器表达式:
xPoints = range(1,500)
yPoints = [random.randint(1,25000) for _ in range(1,500)]
pyplot.plot(xPoints, yPoints)
pyplot.show()

3
+1 表示需要导入 pyplot 模块,很明显对于以前使用过 Matlab 的用户来说,pylab 是一个非常方便的工具,但在文档、示例等中几乎可以互换使用这两种方言,这让我学习 Matplotlib 变得更加困难,尽管它非常出色。 - doug
非常感谢大家!我想我最后一次尝试matplotlib是在2009年10月,由于某些需求,我不得不在2010年4月回到它。 - Arkapravo
yPoints = list(map(lambda x: random.randint(1,25000), xPoints)),无需跟踪额外变量。 - spacecowboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接