MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 872|回复: 8|关注: 0

[已解决] 各位高手:这样的图在matlab如何画

[复制链接]

论坛优秀回答者

12

主题

1460

帖子

82

最佳答案
  • 关注者: 76
本帖最后由 stats01 于 2016-1-8 21:55 编辑

如题:这样的图在matlab如何画(可理解为线条都是直的)?
tu1.png

论坛优秀回答者

1

主题

9736

帖子

1443

最佳答案
  • 关注者: 220
发表于 2016-1-8 22:15:42 | 显示全部楼层
可以用surface或者patch,bar的stacked模式应该也可以,不过bar有点小问题,下边是surface的例子:
n = 8;
cmap = rand(n,3);
colormap(cmap)
surface(0:1,cumsum(rand(n,1)),zeros(n,2),repmat((1:n).',1,2));
axis off

论坛优秀回答者

12

主题

1460

帖子

82

最佳答案
  • 关注者: 76
 楼主| 发表于 2016-1-8 22:29:04 | 显示全部楼层
kaaaf123 发表于 2016-1-8 22:15
可以用surface或者patch,bar的stacked模式应该也可以,不过bar有点小问题,下边是surface的例子:
n = 8;
...

非常感谢!有些语句不熟悉,我得仔细研读一下。另外,我想对有些区段用指定的颜色(不是随机)画出,(事实上,区段有很多,但颜色只是4种类型),应该如何设定。感谢大师指教!

论坛优秀回答者

1

主题

9736

帖子

1443

最佳答案
  • 关注者: 220
发表于 2016-1-8 22:54:23 | 显示全部楼层 |此回复为最佳答案
stats01 发表于 2016-1-8 22:29
非常感谢!有些语句不熟悉,我得仔细研读一下。另外,我想对有些区段用指定的颜色(不是随机)画出,(事 ...

这里随机只是举例,这里n是色块数目+1,cmap其实只需要8-1=7行就够了,每一行是一个rgb的三元组
你想要重复颜色只要对应位置的rgb三元组相同就可以:
n = 8;
color = rand(4,3);
colormap(color(randi(4,n-1,1),:))
height = [0 2 3 4.5 7 8 11 12.5];
surface(0:1,height,zeros(n,2),repmat((1:n).',1,2));
axis off

论坛优秀回答者

12

主题

1460

帖子

82

最佳答案
  • 关注者: 76
 楼主| 发表于 2016-1-9 00:30:21 | 显示全部楼层
kaaaf123 发表于 2016-1-8 22:54
这里随机只是举例,这里n是色块数目+1,cmap其实只需要8-1=7行就够了,每一行是一个rgb的三元组
你想要重 ...

我大概了解了,非常感谢!

论坛优秀回答者

12

主题

1460

帖子

82

最佳答案
  • 关注者: 76
 楼主| 发表于 2016-1-9 19:09:55 | 显示全部楼层
本帖最后由 stats01 于 2016-1-10 20:29 编辑
kaaaf123 发表于 2016-1-8 22:54
这里随机只是举例,这里n是色块数目+1,cmap其实只需要8-1=7行就够了,每一行是一个rgb的三元组
你想要重 ...

大师:
我用bar('stacked')画了染色体片断代换图(缩减值)如下,但colormap只能对第一列起作用,对其它列的着色是错误的。但bar又不能对单列画出叠加的条形图。不知用surface该如何画出多列的叠加条形图。
数据如下:
    35    27    16    45     1     1     3     2
    83    15    79    18     2     2     2     3
    58    53    31    22     3     4     4     1
    54    77    52    91     2     1     1     2
    91    93    16    15     1     2     3     1
    28    12    60   NaN     2     1     1   NaN
    75    56    26   NaN     4     3     2   NaN
    75    46   NaN   NaN     2     4   NaN   NaN
    38    18   NaN   NaN     3     3   NaN   NaN
    56   NaN   NaN   NaN     1   NaN   NaN   NaN
第1~4列为条形图的高度值,第5~8列为颜色值,1代表蓝色、2代表红色、3代表绿色、4为白色。
tu1.jpg

论坛优秀回答者

1

主题

9736

帖子

1443

最佳答案
  • 关注者: 220
发表于 2016-1-9 20:57:00 | 显示全部楼层
stats01 发表于 2016-1-9 19:09
大师:
我用bar('stacked')画了染色体区位图(缩减值)如下,但colormap只能对第一列起作用,对其它列的 ...
% 假设你给的数据为data矩阵
n = 4;
x = [(1:n)-.3;(1:n)+.3;nan(1,n)];
x = repmat(x(:)',size(data,1)+1,1);
y = reshape(repmat(cumsum([zeros(1,n);data(:,1:n)],1),3,1),[],n*3);
c = reshape(repmat([data(:,n+1:end);zeros(1,n)],3,1),[],n*3);
colormap([0 0 1;1 0 0;0 1 0;1 1 1])
surface(x,y,zeros(size(x)),c,'cdatamapping','direct')

论坛优秀回答者

12

主题

1460

帖子

82

最佳答案
  • 关注者: 76
 楼主| 发表于 2016-1-9 21:24:51 | 显示全部楼层
kaaaf123 发表于 2016-1-9 20:57
% 假设你给的数据为data矩阵
n = 4;
x = [(1:n)-.3;(1:n)+.3;nan(1,n)];

特别感谢,正是如此效果。您在图形这块特别强,佩服!。

论坛优秀回答者

12

主题

1460

帖子

82

最佳答案
  • 关注者: 76
 楼主| 发表于 2016-1-10 11:23:21 | 显示全部楼层
thk master kaaaf, this is the figure.
tsz06.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|版权保护|小黑屋|Archiver|手机版|MATLAB中文论坛 ( 苏ICP备08100737号

GMT+8, 2017-2-27 17:40 , Processed in 0.269390 second(s), 84 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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