【问题标题】:Using matplotlib and numpy, what is the simplest way to draw set of lines from vector of points ij to kl?使用matplotlib和numpy,从点ij到kl的向量绘制一组线的最简单方法是什么?
【发布时间】:2016-04-09 22:42:25
【问题描述】:

我正在学习线性代数,并希望能够画线来测试事物。我通常对在图表上绘制一条线((i,j),(k,l))的函数感兴趣。我将使用 numpy.

我的大部分行都是从 (0,0) 到 (k, l)。

我可以手动输入一些基本的东西,效果很好:

import random
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
plt.plot([0, 1], [0, 1])
plt.show()

plt.plot([0, 1], [0, 1], [0, 3], [0, 1])
plt.show()

但是现在,如果我想从 (0,0) 绘制到一组点 xy,这些点由均匀分布的随机抽样生成,我很困惑如何轻松地重构这些数据,以便它对 matplotlib 有意义。我确信必须有一个好的“pythonic”方式来做到这一点。

x = np.random.uniform(0, 100, 5)
y  = np.random.uniform(0, 100, 5)
zeros = zip(np.zeros(5), np.zeros(5))  # 5 pairs at the origin
xy = zip(x, y)  # 5 pairs elsewhere

print xy
print zeros
plt.plot(xy)
plt.show()

显然, plot(xy) 甚至没有接近正确的答案!如何以最直接的方式将zeros 中的 5 个点与xy 中的 5 个点连成一条线?

【问题讨论】:

  • 等等,所以你只想要从原点 x=0,y=0 开始的随机行?

标签: python numpy matplotlib


【解决方案1】:

这是一种继续生成起点和终点的方法。您将能够轻松地修改 make_line() 帮助器以生成和操作任意数量的点集。

import matplotlib.pyplot as plt
import random

line_number = 20

def make_line():
    x, y = (0, random.randrange(1000)), (0, random.randrange(20,1000))
    return x, y

for i in range(line_number):
    x, y = make_line()
    plt.plot(x, y, linewidth=2)

plt.xlim(0, 100)
plt.ylim(0, 100)

plt.show()

【讨论】:

    【解决方案2】:

    如果我正确理解了您的问题,我会为您的所有线路共享一组 x 点。

    x = np.linspace(0,20)
    

    然后生成随机 y 值,将第一个 y 值设置为 0(因此您的集合中有 x=0,y=0)

    linenumber = 10
    for i in range(linenumber):
        y = np.random.randn(0,10)
        y[0] = 0
        plt.plot(x,y)
    

    【讨论】:

    • 我想制作一组随机 (x,y) 点,然后在最简单的情况下从 (0,0) 到每个点画线,或者在另一种情况下从另一组点画线.
    猜你喜欢
    • 2017-03-14
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多