我对用Python绘制随机图很感兴趣。
更准确地说,我考虑了所有具有整数坐标的(x, y)点,因此|x| < 30, |y| < 30 (n = 30只是这里的一个例子)。
然后,对于每一对点,我用概率p (we can say p = 0.5)来决定这两个点是否是连通的。
然后,我要画出我所有的片段。例如,我们可以得到这样的东西:

我遇到的问题是,绘制所有这些片段需要相当长的时间。当然,它随着n和p的增加而增加。
因此,我的问题是:如何使用pyplot快速绘制所有这些片段?
谢谢你的帮助。
编辑:这里是一个代码的例子,但这是缓慢的。
import numpy as np
import matplotlib.pyplot as plt
for i in range(101):
for j in range(101):
if i < 100:
if np.random.uniform() < 1/2:
plt.plot([i - 50, i - 50 + 1], [j - 50, j - 50], "r")
if j < 100:
if np.random.uniform() < 1/2:
plt.plot([i - 50, i - 50], [j - 50, j - 50 + 1], "r")
plt.show()发布于 2022-05-29 18:22:35
您没有提供源代码,但我猜您正在生成段,然后使用plt.plot(point_A, point_B)分别绘制它们。
您应该考虑以下解决方案之一:
1.把你的图形绘制成二维图像
我们没有把你的图看作是一个片段列表,而是把它看作一个连接的2d矩阵,并且只绘制一次这个矩阵。
例如。
segments = ... # you generate this list of pairs (POINT_A, POINT_B) that define your segments using your algorithm
matrix = np.zeros((30, 30))
for ((xA, yA), (xB, yB)) in segments:
# we re-order coordinates in order to always have A inferior to B
if yA > yB:
yA, yB = yB, yA
if xA > xB:
xA, xB = xB, xA
# we mark all points belonging to the segment [A, B] as True in the matrix
matrix[yA:yB+1, xA:xB+1] = 1
plt.imshow(matrix)我还没有测试代码,并提供它只是为了说明这个想法。
2.使用matplotlib中的lineCollections
https://stackoverflow.com/questions/72426134
复制相似问题