【问题标题】:Exhibiting the correct axes values when making plot with density in Matlab在 Matlab 中绘制密度图时显示正确的轴值
【发布时间】:2016-08-24 22:55:12
【问题描述】:

我正在尝试绘制一个具有复平面中随机二次一元多项式的零点密度的图。其实我是在谋划!但是有一个小细节困扰着我:轴的值与图中的点不匹配。这是我的代码。

n=2;
p = [1 random('Uniform', -1, 1, [1,n])]
roots(p)
z = zeros(0);
n = 2;
for j=1:10000
    p = [1 random('Uniform', -1, 1, [1,n])];
    R = roots(p);
    z = [ z, R.' ];
end
Re = real(z);
Im = imag(z);
[values, centers] = hist3([Im(:) Re(:)],[1000 1000]);
imagesc(centers{:}, values,[0,10]);
colorbar
axis equal
axis xy
cmap = summer(max(values(:)));
cmap(1:1,:) = 0;
colormap(cmap);

现在这里是这段代码生成的图。

您可以试试这段代码并检查 max(Re) 和 max(Im),它们对应于实部(x 轴)和虚部(y 轴)的最大值。我有 max(Re) = 1.6076(它总是接近 1.5)和 max(Im) = 0.9993(它总是接近 1)。这些值与情节不符,似乎正好相反。

如果我尝试散射功能(失去密度和所有漂亮的视觉效果),我得到了正确的值。下面的命令生成下图。

scatter(Re(1,:), Im(1,:),'.')

这清楚地表明,除了轴值之外,第一个图实际上(没有像我首先想到的那样旋转)是正确的。我需要帮助来解决这个问题。谢谢。

PS: 我在答案here 中得到了制作这个情节的命令。注意那里的cmets。我明确要求解决这个问题并得到了一个。给定的解决方案在某些情况下确实有效,但在这个解决方案中失败了,我不知道为什么。

【问题讨论】:

    标签: matlab plot density-plot


    【解决方案1】:

    我相信您正在寻找的应该是:

    imagesc(centers{[2,1]}, values,[0,10]);
    

    顺便说一句,您在另一篇文章中没有发现问题是因为示例图像都或多或少是方形的。

    【讨论】:

    • 感谢您的回答。我进行了搜索和命令 imagesc(min(Re):.00001:max(Re),min(Im):.00001:max(Im), values,[0,10]); 工作得很好。你知道这个命令和你的有什么区别吗?
    • 在 image/imagesc 中,只有 x(1)/y(1) 和 x(end)/y(end) 将被使用,其余的这些向量完全不相关。即 x 也可能只是 [min(Re) max(Re)] 并且您仍然会得到相同的结果。只要你把 Re 作为 x 和 Im 作为 y,你就可以走了。使用中心只是一种确保您获得与使用的 hist3 相同的下限/上限的方法,而不必担心 hist3 实际计算它们的方式。
    猜你喜欢
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    相关资源
    最近更新 更多