numpy 在MatPlotLib列表中分割X Y坐标

wnavrhmk  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(117)

我正在编写一个涉及使用Hilbert curve python模块的程序。Hilbert curve python模块的输出以列表的形式出现,或者以单点集的形式出现。我在分离列表以便使用matplotlib绘制它时遇到了麻烦。
下面是示例代码:

import numpy as np
from hilbertcurve.hilbertcurve import HilbertCurve
import regex as re

p=int(input("order of curve: "))
n=2
hilbert_curve = HilbertCurve(p,n)

totalpoints = 2**(p*n)

distances = list(range(totalpoints))
#distances = list(range(int(input("list the number of points"))))

points = hilbert_curve.points_from_distances(distances)

#This stuff below prints out all of the individual points
#for point, dist in zip(points, distances):
#    print (f'point(h={dist}) = {point}')

#this prints out the array of all points generated by the program. Useful for debug
#print(points)

字符串
问题是,当使用matplotlib时,它不会将各个点分离成“点”,从而导致多个线性图而不是Hilbert曲线。
我还需要能够将它们分开,这样我就可以对各个点执行算术运算。这个库无限扩展曲线的长度,而不是在一个1x1的正方形中定义曲线应该如何表示。这很容易通过划分各个点来解决。
该产品的最终结果是能够确定希尔伯特曲线的起始点,而不是使其从0,0开始。第二个实现将在点查找脚本中,其中可以针对特定点检查希尔伯特曲线的生成点,以查看曲线是否通过它。因此,对于这两种实现,我需要能够操作单个点,而在当前列表形式中我不能。
我尝试使用np split()和str.split()方法。str方法失败,因为这是一个列表,而不是一个字符串。np不工作,原因不明。

3hvapo4f

3hvapo4f1#

这应该做你想要的,但如果你有数百万点(6位数)是非常低效的:

import matplotlib.pyplot as plt

points = [[i,i**2] for i in range(10)]
xs=[]
ys=[]
for x,y in points:
    xs.append(x)
    ys.append(y)

plt.figure()
plt.plot(xs,ys)
plt.show()

字符串
在这种情况下,我怀疑你的许多点彼此之间的距离会小于1px,所以你可以将你的点添加到kd树中(如果你的点是二维的,它们看起来是二维的,K将是2),并查询你的视口中的点(假设你已经放大了实际的曲线,而不仅仅是一个实心的点块,因为这就是希尔伯特曲线所做的(它是一个空间填充曲线))。
想象一下同样的场景,对于一个分形图案(希尔伯特曲线确实是),由于其递归性质,它有无限多个点。当显示器上的像素是微米级时,你不会绘制相隔纳米的点,因为它们不会是可分辨的。

相关问题