Mathematica中文论坛-非官方

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 6339|回复: 0
打印 上一主题 下一主题

matlab surf 维数不对 

[复制链接]

532

主题

603

帖子

3035

积分

论坛元老

Rank: 8Rank: 8

积分
3035
跳转到指定楼层
楼主
发表于 2016-3-2 14:18:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 meatball1982 于 2016-3-2 14:24 编辑
  1. clear all
  2. clc
  3. close all

  4. [x,y,z]=peaks(60);

  5. h=bar3(z,1)
  6. for i = 1:length(h)
  7.     zdata = get(h(i),'ZData');
  8.     set(h(i),'CData',zdata)
  9.     % Add back edge color removed by interpolating shading
  10.     set(h,'EdgeColor','w')
  11.     alpha(h,0.9)
  12. end

  13. axis equal
  14. grid off
  15. view(0,-90)
  16. hidden off
  17. colorbar
  18. % axis off

  19. surf(z,'edgecolor','w')
  20. axis equal
  21. view(0,90)
  22. hidden off
  23. colorbar
复制代码


之前,画3D的平面都是用surf,然后再view(0,90)
一个小问题,当数据维数不大的时候,无太多差异。



这是两组60*60的数据,上面是bar3,下面是surf。

当数据比较少的时候,如果只有6*6





差异就明显了,上图bar3,每行有6个格,下图surf,每行有5个格,是两个值的差异来画的。


所以,当数据多的时候,或是只关注曲面的变化形势时,用surf没问题,esle,如果要说明一个图有多少个点,比如神经网络的节点个数,则最好使用bar3。

更新:
  1. col=z;

  2. h=imagesc(col);
  3. axis equal
  4. axis tight
  5. % k=[0 max(z(:))-min(z(:))]
  6. k=[min(z(:)) max(z(:))]
  7. colormap(jet)
  8. caxis(k);
  9. view(0,90)
  10. colorbar
复制代码




又更新: 
02-Mar-2016 14:13:41
每次用surf画图都少一行,少一列,也不是那个事儿.
于是,写了一个小函数.生成新的x,y,z,可以直接surf,然后,维数还是正确的.
  1. function [ X,Y,z_new ] = fun_mm_shift( z )
  2. %UNTITLED Summary of this function goes here
  3. %   Detailed explanation goes here

  4. [m,n]=size(z);
  5. [X,Y]=meshgrid([1:(n+1)]-0.5,[1:(m+1)]-0.5);
  6. tm=z;
  7. tm=[z;z(end,:)];
  8. z_new=[tm';tm(:,end)']';

  9. end
复制代码


把z扔里面.就出来对应的新的x,y,z了.老好用了.

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Mathematica中文论坛-非官方 ( 辽ICP备16001491号-1

GMT+8, 2024-4-30 21:46 , Processed in 0.111083 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表