在 Matlab 中具有正确图例的类似 Excel 的平滑绘图
Posted
技术标签:
【中文标题】在 Matlab 中具有正确图例的类似 Excel 的平滑绘图【英文标题】:Smooth Excel-like plot with correct legend in Matlab 【发布时间】:2014-08-11 23:54:56 【问题描述】:我有一些稀疏数据,并希望将它们绘制为由平滑的内插线连接的标记 - 就像 Microsoft Excel 的默认行为一样。
在互联网上很容易找到这个问题的解决方案,但我觉得它们并不令人满意。他们所做的是:将稀疏数据绘制为一个数据集,将其绘制为不带线条的标记,使用选择的方法对其进行插值,并将插值绘制为第二个数据集,使用不带标记的线条。
这些技巧的问题在于,在图例中,两个数据集将分别列出。我希望图例中将单个数据集描述为穿过标记的线。
在 Matlab 中可以吗?
【问题讨论】:
取决于您的问题。如果你想绘制 n 条插值线,有很多方法可以做到这一点。如果您询问如何添加自定义图例,您可以使用h[1] = plot(NaN,NaN,'r-+')
和legend(h,"Data")
绘制一个穿过标记的红线的虚拟数据集。
...作为答案添加
你的意思是你只想要插值线上的 1 个图例,并且可能添加了标记但没有图例?
【参考方案1】:
如果您想绘制插值线,有很多方法可以做到这一点。您可以尝试使用 matlab interp1()
function 生成插值线。
让我们创建没有 NaN 的 x 和 y 数据。
x = randn(1,10)
y = randn(1,10)
如果您想要 1000 个数据点,而以前只有几个,这很容易:
x2 = min(x):(max(x)-min(x))/1000:max(x)
y2 = interp1(x,y,x2,'cubic')
您可以使用绘制数据和样条曲线
plot(x,y,'r+')
hold on
plot(x2,y2,'r-')
当您使用句柄图形时,自定义图例很简单。您可以使用
绘制一个带有穿过标记的红线的虚拟数据集h(1) = plot(NaN,NaN,'r-+')
lstring1 = 'Data';
然后您可以使用
添加指向该数据集的图例legend(h,lstring)
你最终会得到大致如下所示的东西:
使用句柄图形(即h
)的好处是您可以将任何您想要的数据系列作为h(end+1)
和lstringend+1
放入图例中。
【讨论】:
+1,我也是这样做的,但我没有想过用Nan
做假人。
谢谢,这就是我要找的:)
想一想,图例文本“数据”不正确 - 它应该类似于“三次样条插值数据”。而且,就我个人而言,我不喜欢平滑线,因为它们表明您对数据背后的过程比您实际了解的更多...以上是关于在 Matlab 中具有正确图例的类似 Excel 的平滑绘图的主要内容,如果未能解决你的问题,请参考以下文章