已知两组列表训练次数与mAP值,分别对应图得横轴与纵轴,如何绘制平滑的曲线
时间: 2024-03-06 09:48:32 浏览: 76
可以使用MATLAB或Python的Matplotlib库来绘制平滑曲线。以下是Python Matplotlib库的一个示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import make_interp_spline
# 两组训练次数与mAP值
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [0.5, 0.6, 0.7, 0.8, 0.85, 0.9, 0.92, 0.93, 0.94, 0.95]
# 将x, y变成更密集的点,使曲线平滑
x_new = np.linspace(min(x), max(x), 300)
spl = make_interp_spline(x, y, k=3)
y_smooth = spl(x_new)
# 绘制平滑曲线
plt.plot(x_new, y_smooth)
# 设置坐标轴标签和图像标题
plt.xlabel('训练次数')
plt.ylabel('mAP值')
plt.title('训练次数与mAP值曲线')
# 显示图像
plt.show()
```
这段代码将两组训练次数与mAP值以平滑曲线的形式绘制出来。其中,`make_interp_spline`函数用于将原始的数据点变得更密集,从而使曲线更加平滑。您可以根据自己的需求调整该函数的参数,以达到最佳的效果。
相关问题
echarts怎么绘制横轴为时间纵轴为类别的散点图
要绘制横轴为时间纵轴为类别的散点图,可以使用 ECharts 中的散点图(scatter)和时间轴(time)组合。具体实现步骤如下:
1. 在 HTML 文件中引入 ECharts 库的 JS 文件和主题文件。
```html
<script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/echarts/dist/theme/macarons.js"></script>
```
2. 创建一个具有宽度和高度的 DOM 容器。
```html
<div id="scatter-chart" style="width: 800px; height: 600px;"></div>
```
3. 在 JavaScript 文件中定义数据和配置项,并创建 ECharts 实例。
```javascript
// 定义横轴时间数据
var timeData = ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05', '2021-01-06'];
// 定义纵轴类别数据
var categoryData = ['A', 'B', 'C', 'D', 'E'];
// 定义散点数据,每个数组元素为一个对象,包含三个属性:时间、类别和值
var scatterData = [
{ time: '2021-01-01', category: 'A', value: 10 },
{ time: '2021-01-02', category: 'B', value: 20 },
{ time: '2021-01-03', category: 'C', value: 30 },
{ time: '2021-01-04', category: 'D', value: 40 },
{ time: '2021-01-05', category: 'E', value: 50 },
{ time: '2021-01-06', category: 'A', value: 60 },
];
// 定义配置项
var option = {
// 设置主题
theme: 'macarons',
// 设置标题
title: {
text: '散点图',
},
// 设置横轴类型为时间轴
xAxis: {
type: 'time',
data: timeData,
},
// 设置纵轴类型为类目轴
yAxis: {
type: 'category',
data: categoryData,
},
// 设置系列数据
series: [
{
// 设置系列类型为散点图
type: 'scatter',
// 设置数据
data: scatterData.map(function (item) {
return [item.time, item.category, item.value];
}),
},
],
};
// 创建 ECharts 实例
var myChart = echarts.init(document.getElementById('scatter-chart'));
// 渲染图表
myChart.setOption(option);
```
在上述代码中,我们使用了 ECharts 中的时间轴(xAxis.type: 'time')和类目轴(yAxis.type: 'category')来绘制横轴为时间纵轴为类别的散点图。同时,我们将散点数据格式化为 ECharts 所需的二维数组格式([time, category, value]),并通过 map() 方法将散点数据转换成 ECharts 所需的格式。最后,我们创建 ECharts 实例并调用 setOption() 渲染图表。
qcustomplot 横轴自适应,纵轴刻度和横轴保持一样一样
QCustomPlot是一个强大的Qt库,用于创建定制的绘图界面,其中包括功能强大的数据可视化组件。关于横轴自适应和纵轴刻度设置,你可以这样做:
1. **横轴自适应** (X-axis adaptive scaling): 在QCustomPlot中,你可以通过`QCPAxisTicker:: logarithmic()` 或 `QCPAxisTicker::linear()` 等函数设置x轴的刻度模式,使其能够自动调整以更好地显示数据范围。如果你的数据分布不均匀,可以尝试使用`QCPLogTickGenerator`。
2. **纵轴刻度** (Y-axis ticks and labels): 对于纵轴,同样有类似的设置方法,如`QCPYTickGenerator` 或者手动设置`QCPAxis::setTickPositions()` 和 `QCPAxis::setLabelStrings()`。如果需要等间距的刻度,可以使用`QCPGrid` 来添加网格线。
3. **保持一致的外观** (Maintaining consistency): 为了确保横轴和纵轴看起来一致,可以同时调整它们的标签样式、字体大小以及最小和最大刻度值。此外,还可以使用`QCPAxis::setLabelAlignment()` 控制标签对齐的方式。
要实现上述功能,你需要在QCustomPlot的槽函数中操作相应的axis对象,并确保在绘制图表之前调用了适当的设置方法。以下是简化的步骤示例:
```cpp
// 创建QCustomPlot实例
QCustomPlot plot;
// 设置横轴为线性刻度
QCPAxis *xAxis = plot.axis(QCPAxis::Bottom);
xAxis->setTicker(new QCPLinearTickGenerator());
// 设置纵轴也为线性刻度并同步横轴
QCPAxis *yAxis = plot.axis(QCPAxis::Left);
yAxis->setTicker(xAxis->ticker());
// 自定义刻度标签和间隔
QPen pen;
pen.setWidth(1); // 设置线条宽度
yAxis->setPen(pen);
// 其他外观设置...
// 保持横纵轴一致,例如统一标签对齐方式
yAxis->setLabelAlignment(Qt::AlignRight | Qt::AlignTop);
```
阅读全文