Matlab绘图的自定义标记

5
我已经搜索了Google和其他人都说不支持。我想知道是否有任何开放的社区Matlab函数可以绘制用户定义的png作为标记。我找到的最接近的是http://de.mathworks.com/matlabcentral/fileexchange/39487-custom-marker-plot/content/plotCustMark/plotCustMark.m。但它不能达到预期的目的。如果可能的话,让我知道是否可以为此编写一些内容!谢谢。
额外的问题:好吧,我现在有这个奇怪的问题。我的png有黑色背景!!我不明白为什么。我试图降低alpha值,但还是不行。
解决方案:我在评论中提到的问题可以通过以下方法解决: http://de.mathworks.com/matlabcentral/answers/144411-displaying-image-over-background-making-top-image-background-color-transparent 方法:通过导入您的图像的透明度设置来解决。
[marker,map,transperancy ] = imread('car.png');

并稍后设置

handleIm = imagesc([x_low x_high], [y_low y_high], marker)
set(handleIm ,'AlphaData',transperancy);

澄清:这些图像原本都是透明的,但由于我将它们叠加在另一张图片上,导致当前图像的背景变成了默认的黑色。我发布了一个解决方案,我想这对很多人来说会非常有用。

1个回答

9

imagesc函数可以将PNG图片放置在绘图中。我们可以按照以下方式使用:

定义用户数据:

x = 1:10;
y = 5*rand(size(x)) + 2.5;

加载标记图像:

marker = imread('icon.png');

定义标记大小并调整xy数据:

markersize = [1,1]; %//The size of marker is expressed in axis units, NOT in pixels
x_low = x - markersize(1)/2; %//Left edge of marker
x_high = x + markersize(1)/2;%//Right edge of marker
y_low = y - markersize(2)/2; %//Bottom edge of marker
y_high = y + markersize(2)/2;%//Top edge of marker

然后,我们将加载的图片放置在指定点的图表上。
for k = 1:length(x)
    imagesc([x_low(k) x_high(k)], [y_low(k) y_high(k)], marker)
    hold on
end
axis equal
hold off

在最终,你可能会得到以下内容: enter image description here 为了实现所需的外观,你需要一段时间来调整参数。
希望这有所帮助。

好的,我现在遇到了一个奇怪的问题。我的 PNG 图片有一个黑色背景!我不明白为什么会这样。我尝试降低 alpha 值,但还是不起作用。 - Sayantan Roy
在循环内,您需要使用 h(k) = plot(...) 来获取绘制元素的句柄,并使用 delete(h(k-1)) 删除前一个标记。 - brainkz
嗯,我想不到其他办法,只能更改图片了。@Sayantan_Roy - brainkz
你应该使用带有透明背景的 .png 图像!我认为这肯定会解决问题! - Sardar Usama
2
@brainkz 考虑将他提出的解决方案添加到你的答案中!很有可能会有人标记它,因为问题不是回答问题的地方! - Sardar Usama
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接