上述代码生成的折线图只有一个点且固定,没有移动轨迹和多个点
时间: 2024-04-28 21:20:06 浏览: 9
看起来问题出在字典 `dic_for_drawing_trails` 中。在代码中,每个目标的 ID 对应一个 deque 队列,用于存储该目标的轨迹点。每次遍历锚框时,都会将当前的中心点加入对应目标的 deque 队列中,并绘制从队列中第一个点到最后一个点的线段,从而形成轨迹。
现在问题是你提供的代码只绘制了每个目标的最后一个点,这可能是因为你的 deque 队列只存储了一个点。你可以尝试增加队列的长度,例如将 `deque(maxlen=64)` 改为 `deque(maxlen=128)`,这样每个目标的队列就可以存储更多的点,从而形成更长的轨迹。
此外,你还需要注意一些细节问题,例如在计算轨迹线段的粗细时,代码中使用了一个公式 `thickness = int(np.sqrt(64 / float(i + i)) * 1.5)`,这个公式可能需要根据实际情况进行调整。另外,由于 deque 队列是一个循环队列,所以你需要在遍历队列时进行特殊处理,以避免出现异常情况。
希望这些提示对你有所帮助!
相关问题
python生成一个实时更新显示折线图且图窗长度固定不变的代码
你可以使用Matplotlib中的动态图功能来实现实时更新显示折线图。这里给出一个简单的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# 设置图窗大小和限制的数据范围
fig, ax = plt.subplots(figsize=(8,6))
ax.set_xlim(0, 100)
ax.set_ylim(0, 1)
# 初始化折线图
line, = ax.plot([], [])
# 生成随机数据
def generate_data():
while True:
yield np.random.rand()
# 更新折线图
def update(frame):
ydata = list(line.get_ydata())
ydata.append(next(frame))
xdata = list(range(len(ydata)))
if len(ydata) > 100: # 限制折线图长度
ydata.pop(0)
xdata.pop(0)
line.set_data(xdata, ydata)
return line,
# 创建动态图
ani = FuncAnimation(fig, update, frames=generate_data, blit=True, interval=100)
# 显示图形
plt.show()
```
这段代码中,我们首先定义了一个图窗,设置了其大小和限制的数据范围。然后定义了一个折线图,用于显示数据。接着,我们生成了随机数据的无限迭代器,并在`update`函数中更新折线图的数据,并限制其长度不超过100个数据点。最后,使用`FuncAnimation`创建了一个动态图,并设置了更新间隔为100毫秒。最后,调用`plt.show()`显示图形。
pyqt用QChart生成折线图每一个点都要用原型标注
可以使用QScatterSeries来实现每一个点用原型标注的折线图,示例代码如下:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtChart import QChart, QChartView, QLineSeries, QScatterSeries, QValueAxis
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建 QLineSeries 和 QScatterSeries 对象
series = QLineSeries()
scatter_series = QScatterSeries()
# 添加数据
data = [(0, 1), (1, 3), (2, 2), (3, 5), (4, 7), (5, 4), (6, 6)]
for x, y in data:
series.append(x, y)
scatter_series.append(x, y)
# 设置 QScatterSeries 的样式
scatter_series.setMarkerSize(10)
scatter_series.setMarkerShape(QScatterSeries.MarkerShapeCircle)
# 创建 QChart 对象,并添加 QLineSeries 和 QScatterSeries
chart = QChart()
chart.addSeries(series)
chart.addSeries(scatter_series)
# 设置 X 轴和 Y 轴范围
axis_x = QValueAxis()
axis_x.setRange(0, 6)
axis_y = QValueAxis()
axis_y.setRange(0, 8)
# 将 X 轴和 Y 轴添加到 QChart 中
chart.addAxis(axis_x, chart.AxisX)
chart.addAxis(axis_y, chart.AxisY)
# 将 QLineSeries 和 QScatterSeries 与 X 轴和 Y 轴关联
series.attachAxis(axis_x)
series.attachAxis(axis_y)
scatter_series.attachAxis(axis_x)
scatter_series.attachAxis(axis_y)
# 创建 QChartView 对象,并将 QChart 设置为其图表
chart_view = QChartView(chart)
chart_view.setRenderHint(QPainter.Antialiasing)
# 将 QChartView 添加到主窗口中
self.setCentralWidget(chart_view)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
运行程序,可以看到生成的折线图每一个点都用原型标注。可以根据需要调整原型大小和形状。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)