首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python绘制随机图

用Python绘制随机图
EN

Stack Overflow用户
提问于 2022-05-29 18:10:41
回答 1查看 244关注 0票数 1

我对用Python绘制随机图很感兴趣。

更准确地说,我考虑了所有具有整数坐标的(x, y)点,因此|x| < 30, |y| < 30 (n = 30只是这里的一个例子)。

然后,对于每一对点,我用概率p (we can say p = 0.5)来决定这两个点是否是连通的。

然后,我要画出我所有的片段。例如,我们可以得到这样的东西:

我遇到的问题是,绘制所有这些片段需要相当长的时间。当然,它随着n和p的增加而增加。

因此,我的问题是:如何使用pyplot快速绘制所有这些片段?

谢谢你的帮助。

编辑:这里是一个代码的例子,但这是缓慢的。

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-29 18:22:35

您没有提供源代码,但我猜您正在生成段,然后使用plt.plot(point_A, point_B)分别绘制它们。

您应该考虑以下解决方案之一:

1.把你的图形绘制成二维图像

我们没有把你的图看作是一个片段列表,而是把它看作一个连接的2d矩阵,并且只绘制一次这个矩阵。

例如。

代码语言:javascript
复制
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/a/21357666/5728381

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72426134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档