小编scl*_*mic的帖子

以数据单位指定标记大小以进行绘图

我从切换matplotlibplotly主要是绘制在2D / 3D流畅的动画。我想绘制由多个圆/球组成的机器人的运动。

机器人的不同身体部位具有不同的大小,圆圈需要准确地表示出来。是否有办法plotly来指定数据单元标记的大小?例如,我想绘制一个5m x 5m(x5m)的截面,其中半径为0.1m的圆/球沿着不同的轨迹运动。

在matplotlib中,我知道两种选择。一种是使用补丁(matplotlib.patches.Circle)。第二种方法是绘制点并通过考虑dpi正确缩放其marker_size请参阅matplotlib的此问题的答案)。

A)是否可以对图形进行3D动画处理?

要么

B)有没有办法以数据单位指定标记的大小或正确缩放sizeref属性?

# Point with radius 2 (approx.)
from plotly.offline import plot
import plotly.graph_objs as go

trace = go.Scatter(x=[4], y=[4],
                   mode='markers',
                   marker={'size': 260, 'sizeref': 1})  # ???

layout = dict(yaxis=dict(range=[0, 10]),
              xaxis=dict(range=[0, 10]))

fig = dict(data=[trace], layout=layout)
plot(fig, image_height=1000, image_width=1000)
Run Code Online (Sandbox Code Playgroud)

缩放marker_size的问题是,只有当您不放大或缩小图像时,图像才是正确的,因为marker_size保持恒定。因此,更干净的方法是直接以数据单位指定圆圈的大小。

python plotly

6
推荐指数
1
解决办法
295
查看次数

在图像中找到最少数量的矩形

我有矩形随机放置的二进制图像,我想获得这些矩形的位置和大小。如果可能,我想要精确重新创建图像所需的最少矩形数量。

左边是我的原始图像,右边是我申请后得到的图像scipys.find_objects() (就像这个问题的建议)。

长方形 长方形

import scipy

# image = scipy.ndimage.zoom(image, 9, order=0)
labels, n = scipy.ndimage.measurements.label(image, np.ones((3, 3)))
bboxes = scipy.ndimage.measurements.find_objects(labels)

img_new = np.zeros_like(image)
for bb in bboxes:
    img_new[bb[0], bb[1]] = 1
Run Code Online (Sandbox Code Playgroud)

如果矩形相距很远,这可以正常工作,但是如果它们重叠并构建更复杂的结构,则该算法只会给我最大的边界框(对图像进行上采样没有区别)。我有一种感觉,应该已经存在执行此操作的scipyoropencv方法。我很高兴知道是否有人对如何解决这个问题有想法,或者甚至更了解现有的解决方案。

结果我想要图像中的矩形列表(即左下角:右上角)。条件是当我重绘那些填充的矩形时,我希望获得与以前完全相同的图像。如果可能,矩形的数量应该最少。

这是生成示例图像的代码(以及更复杂的示例original vs scipy

import numpy as np 

def random_rectangle_image(grid_size, n_obstacles, rectangle_limits):
    n_dim = 2
    rect_pos = np.random.randint(low=0, high=grid_size-rectangle_limits[0]+1,
                                 size=(n_obstacles, n_dim))
    rect_size = np.random.randint(low=rectangle_limits[0],
                                  high=rectangle_limits[1]+1,
                                  size=(n_obstacles, n_dim))

    # Crop rectangle size if it goes over the boundaries …
Run Code Online (Sandbox Code Playgroud)

python numpy image-processing rectangles scipy

5
推荐指数
1
解决办法
191
查看次数

使用 matplotlib 围绕点旋转矩形

我想旋转Rectanglesmatplotlib但正常的补丁总是围绕 的左下角旋转Rectangle。有没有办法描述更一般的转换?例如,我想围绕矩形短边的中点旋转,以便结果看起来像时钟指针的运动。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

height = 0.1
width = 1
fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.set_xlim([-width * 1.2, width * 1.2])
ax.set_ylim([-width * 1.2, width * 1.2])

ax.plot(0, 0,  color='r', marker='o', markersize=10)
for deg in range(0, 360, 45):
    rec = Rectangle((0, 0), width=width, height=height, 
                    angle=deg, color=str(deg / 360), alpha=0.9)
    ax.add_patch(rec)
Run Code Online (Sandbox Code Playgroud)

原来的

python matplotlib rotation

2
推荐指数
1
解决办法
3193
查看次数