gpt4 book ai didi

python - 了解 matplotlib verts

转载 作者:太空宇宙 更新时间:2023-11-03 13:20:10 28 4
gpt4 key购买 nike

我正在尝试在 matplotlib 中为散点图创建自定义标记,其中标记是具有固定高度和不同宽度的矩形。每个标记的宽度是 y 值的函数。我用 this code 试过这样作为模板并假设如果给 verts 一个 N 二维元组的列表,它会绘制具有相应第一个值的宽度和第二个值的高度的矩形(也许这已经是错误的,但是我还能如何实现它?)。

我有一个 x 和 y 值列表,每个值都包含以度为单位的角度。然后,我通过

计算每个标记的宽度和高度
field_size = 2.
symb_vec_x = [(field_size / np.cos(i * np.pi / 180.)) for i in y]
symb_vec_y = [field_size for i in range(len(y))]

并构建顶点列表并绘制所有内容

symb_vec = list(zip(symb_vec_x, symb_vec_y))
fig = plt.figure(1, figsize=(14.40, 9.00))
ax = fig.add_subplot(1,1,1)
sc = ax.scatter(ra_i, dec_i, marker='None', verts=symb_vec)

但是生成的图是空的,但是没有错误消息。谁能告诉我我在定义顶点时做错了什么以及如何正确地做?谢谢!

最佳答案

如前所述,需要删除 'marker='None' 然后指定带顶点的矩形的适当方法类似于

verts = list(zip([-10.,10.,10.,-10],[-5.,-5.,5.,5]))
ax.scatter([0.5,1.0],[1.0,2.0], marker=(verts,0))

顶点定义为([x1,x2,x3,x4],[y1,y2,y3,y4])所以必须注意哪些得到减号等。

这个 (verts,0) 在文档中提到为

For backward compatibility, the form (verts, 0) is also accepted, but it is equivalent to just verts for giving a raw set of vertices that define the shape.

但是我发现只使用 verts没有给出正确的形状。

要使流程自动化,您需要执行以下操作

v_val=1.0
h_val=2.0
verts = list(zip([-h_val,h_val,h_val,-h_val],[-v_val,-v_val,v_val,v_val]))

基本示例:

import pylab as py
ax = py.subplot(111)
v_val=1.0
h_val=2.0
verts = list(zip([-h_val,h_val,h_val,-h_val],[-v_val,-v_val,v_val,v_val]))
ax.scatter([0.5,1.0],[1.0,2.0], marker=(verts,0))

enter image description here *

编辑

个别标记

因此您需要为每个案例手动创建一个vert。这显然取决于您希望矩形如何点对点更改。这是一个例子

import pylab as py
ax = py.subplot(111)


def verts_function(x,y,r):
# Define the vertex's multiplying the x value by a ratio
x = x*r
y = y
return [(-x,-y),(x,-y),(x,y),(-x,y)]

n=5
for i in range(1,4):
ax.scatter(i,i, marker=(verts_function(i,i,0.3),0))
py.show()

enter image description here

所以在我的简单例子中,我绘制了点 i,i 并在它们周围绘制了矩形。指定顶点标记的方式不直观。在 the documentation描述如下:

verts: A list of (x, y) pairs used for Path vertices. The center of the marker is located at (0,0) and the size is normalized, such that the created path is encapsulated inside the unit cell.

因此,以下是等价的:

vert = [(-300.0, -1000), (300.0, -1000), (300.0, 1000), (-300.0, 1000)]
vert = [(-0.3, -1), (0.3, -1), (0.3, 1), (-0.3, 1)]

例如,它们会产生相同的标记。因此,我使用了一个比率,这是您需要投入工作的地方。 r 的值(比率)将改变哪个轴保持不变。

这一切都变得非常复杂,我相信一定有更好的方法来做到这一点。

关于python - 了解 matplotlib verts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16189928/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com