【问题标题】:Custom Markers for Matlab plotMatlab 绘图的自定义标记
【发布时间】:2026-01-28 16:40:01
【问题描述】:

我搜索了谷歌,每个人都说它不支持。我想知道是否有任何开放的社区 matlab 函数可以将用户定义的 png 绘制为标记。我找到的最接近的是 http://de.mathworks.com/matlabcentral/fileexchange/39487-custom-marker-plot/content/plotCustMark/plotCustMark.m 。但这并没有达到预期的目的。 让我知道我是否有可能为此写点东西!谢谢。

其他问题:好的,我现在有这个奇怪的问题。我的png有黑色背景!我不明白为什么。我尝试降低 alpha 值仍然不起作用。

解决方案:我在@brainkz的cmets中提到的问题可以通过

解决

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);

澄清:图像都是透明的,但由于我将其覆盖在另一张图像上,它会将当前图像背景设置为默认黑色。我发布了一个解决这个问题的方法,我想这对很多人来说真的很有用。

【问题讨论】:

    标签: matlab plot markers


    【解决方案1】:

    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
    

    最后,你可能会得到以下结果:

    要获得所需的外观,您需要使用参数一段时间。

    希望有帮助

    【讨论】:

    • 在循环外使用axis equal不是更好吗?
    • 好建议@Sardar_Usama
    • 非常感谢。我认为这需要在我的情节中对不同的层次进行一些特别的修改。但到目前为止,它做了我打算做的事情。干杯!
    • 我想知道有没有办法隐藏标记?每个循环我都想要一个新标记,但隐藏前一个 @brainkz
    • @brainkz 考虑将他提出的解决方案添加到您的答案中!很有可能有人会举报,因为问题不是回答问题的地方!