我使用的是pyplot用matplotlib,我想作为一个图像来显示一些数据.当我使用imshow()数据时,我想要查看它的方式.在将数据发送到数组之前,如何使用imshow()或更换x和y轴?numpyimshow()
(即我希望水平轴是垂直的)
我已尝试在命令中使用origin='upper'和,但这只是反转一个轴而不是切换它们origin='lower'imshow()
我也试过使用reshape数据,但订单搞砸了
我有一个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()可能会有所帮助,但不知道如何有效地使用它们来解决这个问题.
有没有办法让 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)
我尝试这样做的原因是因为我在图中运行了一堆绘图/动画,它们显示了正在运行的模拟的输出,但是一直显示它们会大大降低我的计算机的速度。有任何想法吗?
我正在使用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) 我使用 Tkinter 中的“缩放”小部件来控制另一个程序中对象的位置。用户既可以在 GUI 中移动滑块,也可以直接从外部程序移动对象。我希望滑块值始终显示对象的当前位置。我遇到的问题是,移动滑块和使用该set方法以编程方式设置滑块都会调用 Scale 小部件的回调。我只想在物理移动时才调用它。
到目前为止我尝试过的:
根据此答案的建议,我尝试在调用之前使用标志并禁用回调set,但这在我的情况下不太有效。设置和读取对象位置存在时间延迟,我认为这就是导致问题的原因(我构建了一个玩具示例,其中滑块刚刚连接到另一个滑块,并且标志解决方案有效,但它不起作用对于我的实际应用)。我还使用该after功能定期检查物理对象是否被移动。我不确定这是否是最好的方法,或者是否会影响任何事情(它可能允许标志在部分代码中处于错误的状态)。
我想我必须尝试对小部件进行子类化的建议,然后制作我自己的set设置值但不调用回调的方法版本。但我不确定如何做到这一点,并且通过浏览小部件的源代码,并不太清楚这一切发生在哪里。任何帮助将不胜感激,谢谢!
我有一个浮点数,我想将其四舍五入为整数,但总是向上舍入(其中“向上”表示幅度更大)
例如,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 ),这似乎也有点过分
我有一系列来自视频流的图像,我想用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 ×6
python-2.7 ×5
matplotlib ×4
numpy ×3
image ×2
rounding ×1
scipy ×1
slider ×1
tkinter ×1