小编Bre*_*ent的帖子

为Matplotlib imshow()翻转x和y轴

我使用的是pyplotmatplotlib,我想作为一个图像来显示一些数据.当我使用imshow()数据时,我想要查看它的方式.在将数据发送到数组之前,如何使用imshow()或更换x和y轴?numpyimshow()

(即我希望水平轴是垂直的)

我已尝试在命令中使用origin='upper'和,但这只是反转一个轴而不是切换它们origin='lower'imshow()

我也试过使用reshape数据,但订单搞砸了

numpy image matplotlib python-2.7

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

Python - 在2D numpy数组中查找特定值的最大区域的有效方法

我有一个2D numpy数组,其中一些值为零,有些则不是.我试图找到一种有效的方法来找到数组中最大的零块(通过返回零的数量,以及对中心位置的粗略概念)

例如,在这个数组中,我想找到9的丛,中心为(3,4):

[[ 1, 1, 1, 0, 0 ],
 [ 1, 0, 1, 1, 0 ],
 [ 1, 1, 1, 1, 1 ],
 [ 1, 1, 0, 0, 0 ],
 [ 1, 1, 0, 0, 0 ],
 [ 1, 1, 0, 0, 0 ]]
Run Code Online (Sandbox Code Playgroud)

是否有一个很好的矢量化方式来在numpy或scipy中完成这样的事情?

这些团块的形状大致为圆形,并且没有孔.

来自scipy的ndimage.label()做了一些与此相近的事情,但并不是我所追求的.我有一种感觉numpy.where()numpy.diff()可能会有所帮助,但不知道如何有效地使用它们来解决这个问题.

python numpy scipy multidimensional-array

10
推荐指数
1
解决办法
1380
查看次数

如何切换 matplotlib 图形的可见性?

有没有办法让 matplotlib 图形消失并重新出现以响应某些事件?(即按键)

我试过使用,fig.set_visible(False)但这似乎对我没有任何作用。

简单的代码示例:

import matplotlib
import matplotlib.pyplot as plt

fig=matplotlib.pyplot.figure(figsize=(10, 10))

# Some other code will go here

def toggle_plot():
  # This function is called by a keypress to hide/show the figure
  fig.set_visible(not fig.get_visible()) # This doesn't work for me

plt.show()
Run Code Online (Sandbox Code Playgroud)

我尝试这样做的原因是因为我在图中运行了一堆绘图/动画,它们显示了正在运行的模拟的输出,但是一直显示它们会大大降低我的计算机的速度。有任何想法吗?

python matplotlib

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

matplotlib - 在添加新数据时如何保持轴不变?

我正在使用matplotlib来显示不断更新的数据(每秒大约改变10次).我正在使用3D散点图,我希望将轴固定到特定范围,因为数据相对于绘图边缘的位置非常重要.

目前,每当我添加新数据时,轴将重置为按数据缩放,而不是我想要的大小(当我有hold = False时).如果我设置hold = True,轴将保持正确的大小,但新数据将叠加在旧数据上,这不是我想要的.

如果我每次获取新数据时重新调整轴,我都可以使用它,但这似乎是一种低效的方法,特别是因为我还需要再次执行所有其他格式化(添加标题,图例等)

有没有什么方法可以只指定一次图的属性,这将在我添加新数据时保持不变?

这是我的代码的大致轮廓,以帮助解释我的意思:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

X_MAX = 50
Y_MAX = 50
Z_MAX = 50

fig = plt.figure(1)
ax = fig.add_subplot(111, projection='3d')
ax.set_title("My Title")
ax.set_xlim3d([0, X_MAX])
ax.set_ylim3d([0, Y_MAX])
ax.set_zlim3d([0, Z_MAX])
ax.set_autoscale_on(False)
# This is so the new data replaces the old data
# seems to be replacing the axis ranges as well, maybe a different method should be used?
ax.hold(False)

plt.ion()
plt.show()

a = 0
while a < 50: …
Run Code Online (Sandbox Code Playgroud)

python matplotlib python-2.7

4
推荐指数
1
解决办法
4454
查看次数

Tkinter,Python - 更改滑块值而不触发回调

我使用 Tkinter 中的“缩放”小部件来控制另一个程序中对象的位置。用户既可以在 GUI 中移动滑块,也可以直接从外部程序移动对象。我希望滑块值始终显示对象的当前位置。我遇到的问题是,移动滑块和使用该set方法以编程方式设置滑块都会调用 Scale 小部件的回调。我只想在物理移动时才调用它。

到目前为止我尝试过的:

根据此答案的建议,我尝试在调用之前使用标志并禁用回调set,但这在我的情况下不太有效。设置和读取对象位置存在时间延迟,我认为这就是导致问题的原因(我构建了一个玩具示例,其中滑块刚刚连接到另一个滑块,并且标志解决方案有效,但它不起作用对于我的实际应用)。我还使用该after功能定期检查物理对象是否被移动。我不确定这是否是最好的方法,或者是否会影响任何事情(它可能允许标志在部分代码中处于错误的状态)。

我想我必须尝试对小部件进行子类化的建议,然后制作我自己的set设置值但不调用回调的方法版本。但我不确定如何做到这一点,并且通过浏览小部件的源代码,并不太清楚这一切发生在哪里。任何帮助将不胜感激,谢谢!

python tkinter slider python-2.7

4
推荐指数
1
解决办法
2944
查看次数

Python - 将浮点数四舍五入为整数的最佳方法是什么

我有一个浮点数,我想将其四舍五入为整数,但总是向上舍入(其中“向上”表示幅度更大)

例如,4.2 将四舍五入为 5,-4.2 将四舍五入为 -5.0

是否有一种内置于 Python 中的好方法来做到这一点?如果没有,您会推荐什么作为执行此操作的最有效方法?

最初我只是使用math.ceil(), 直到我意识到math.ceil(4.2)给出 5,而math.ceil(-4.2)给出 -4,这不是我想要的。

解决这个问题的一种方法是使用ceil正数和floor负数,但是代码开始看起来非常糟糕,到处都是内联 if 语句(我在多个地方使用这个操作)

另一种可能性可能是类似的东西math.copysign( math.ceil( abs( x ) ), x ),这似乎也有点过分

python rounding python-2.7

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

使用matplotlib更新灰度图像

我有一系列来自视频流的图像,我想用Matplotlib(灰度)显示.出于某种原因,我可以让它们完美地显示颜色,但是当我将它们转换为灰度时则不能.

由于我有很多图像,我使用set_data( image )而不是imshow( image )因为它更快.使用这两个命令可以很好地处理彩色图像,但灰度图只适用于imshow().如果我使用set_data()我只是得到一个黑色图像,无论我发送什么数据.

知道这可能会发生什么吗?

我的代码在下面供参考.我用重要的评论突出了重要的一点,但是我已经包含了所有其他代码,以防其他因素导致问题.其余的代码基本上建立了一个队列,其中填充了来自摄像头的图像,我希望在我得到它们时显示它们.

import matplotlib.pyplot as plt
from matplotlib import cm
from cv_bridge import CvBridge, CvBridgeError
import cv
from collections import deque
import rospy
from sensor_msgs.msg import Image
import numpy as np

class CameraViewer():

  def __init__( self, root='navbot' ):

    self.root = root
    self.im_data = deque()
    self.bridge = CvBridge() # For converting ROS images into a readable format

    self.im_fig = plt.figure( 1 )
    self.im_ax = self.im_fig.add_subplot(111)
    self.im_ax.set_title("DVS Image") …
Run Code Online (Sandbox Code Playgroud)

python numpy image matplotlib python-2.7

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