楼主: chuxuezhe222

[已解决] 怎样用不同的颜色画出同一条线?

[复制链接]

新手

10 麦片

财富积分


050


0

主题

27

帖子

0

最佳答案
发表于 2016-7-15 15:26:35 | 显示全部楼层
:o:(:(:(:(:(:(:(:(:lol:lol:lol

MATLAB 基础讨论
版块优秀回答者

中级

547 麦片

财富积分


5001500


71

主题

1428

帖子

103

最佳答案
  • 关注者: 68
发表于 2016-7-15 21:01:02 | 显示全部楼层 |此回复为最佳答案
本帖最后由 meatball1982 于 2016-7-15 21:04 编辑
chuxuezhe222 发表于 2016-7-15 14:53
劳烦你把这幅图的代码发我一份学习一下吧

思路之前已经说过了。
另外,用思路3,可以直接通过你的值来画曲线的颜色。可能效果会更加好一些,就是要修改。
col =m+rand(size(m))*0.02
这一部分不知道你看没看明白(也可能是我多事了。)

  1. clear all
  2. clc
  3. clf


  4. tm=load('15.txt');
  5. dat=reshape(tm,[100,3]);
  6. x=dat(:,2);
  7. y=dat(:,3);
  8. z=dat(:,1);
  9. z_mod=(z-min(z))./(max(z)-min(z));
  10. z_mod=z_mod;

  11. n=100;


  12. hold on
  13. for i=1:n-1
  14.     plot3(x(i:i+1),y(i:i+1),[0 0],'o-',...
  15.           'markeredgecolor','none',...
  16.           'linewidth',2,'color',[z_mod(i),1-z_mod(i),1],...
  17.           'markersize',2);
  18. end
复制代码


新手

29 麦片

财富积分


050


0

主题

39

帖子

2

最佳答案
  • 关注者: 1
发表于 2016-7-15 21:52:31 | 显示全部楼层
其实有一种更简单的方法,就是把先生成三维图,因为三维图是自动上色的,可以通过调整视角得到上色的二维图,代码如下,颜色可以通过colormap自由调整。
  1. [X Y]=meshgrid(x,y);Z=meshgrid(z,z);mesh(X,Y,Z);view(0,0);
  2. %x,y,z对应三列数据
复制代码
untitled.jpg

新手

14 麦片

财富积分


050


24

主题

74

帖子

0

最佳答案
 楼主| 发表于 2016-7-16 00:23:28 | 显示全部楼层
meatball1982 发表于 2016-7-15 21:01
思路之前已经说过了。
另外,用思路3,可以直接通过你的值来画曲线的颜色。可能效果会更加好一些,就是要 ...

z_mod=(z-min(z))./(max(z)-min(z));请问这是把z的值缩小了吗?可以不缩小吗?因为颜色一定要代表原始数据的大小,真的是劳烦你了

图例我需要原始数据的大小

图例我需要原始数据的大小

新手

14 麦片

财富积分


050


24

主题

74

帖子

0

最佳答案
 楼主| 发表于 2016-7-16 00:26:41 | 显示全部楼层
ziye1993 发表于 2016-7-15 21:52
其实有一种更简单的方法,就是把先生成三维图,因为三维图是自动上色的,可以通过调整视角得到上色的二维图 ...

非常感谢你的回复!这个我也试过了,由于我们的数据比较多,做出来的线条也就很多,如果做成这样看起来会很乱,所以老师希望我们做出前面我发的图片显示的那种,都是比较平滑的曲线。

MATLAB 基础讨论
版块优秀回答者

中级

547 麦片

财富积分


5001500


71

主题

1428

帖子

103

最佳答案
  • 关注者: 68
发表于 2016-7-16 08:58:37 | 显示全部楼层
chuxuezhe222 发表于 2016-7-16 00:23
z_mod=(z-min(z))./(max(z)-min(z));请问这是把z的值缩小了吗?可以不缩小吗?因为颜色一定要代表原始数 ...

因为要生成 cool的colormap,值是要在[0,1]的范围之内的,所以画图时有缩小。
解决方法1:你可以再画一张图,按你的数据的值的范围生成一个mesh。用新图的colorbar,和原图的线。
解决方法2:可以修改colorbar 的显示文字。论坛里有帖子,可以参考一下。

因为是等比例缩小的,所以对应的color是一样的。只是这里是「0,1」,你要的是「你的min, 你的max」

用surface那种方法就不用考虑这些了。也相对简单一些。看你自己的需要。

新手

11 麦片

财富积分


050


2

主题

11

帖子

0

最佳答案
发表于 2016-7-18 19:18:10 | 显示全部楼层
meatball1982 发表于 2016-7-16 08:58
因为要生成 cool的colormap,值是要在[0,1]的范围之内的,所以画图时有缩小。
解决方法1:你可以再画一 ...

大神能不能帮我看看这个问题是咋个回事,http://www.ilovematlab.cn/forum. ... peid%26typeid%3D604

MATLAB 基础讨论
版块优秀回答者

中级

547 麦片

财富积分


5001500


71

主题

1428

帖子

103

最佳答案
  • 关注者: 68
发表于 2016-7-19 09:03:15 | 显示全部楼层
千年的狐 发表于 2016-7-18 19:18
大神能不能帮我看看这个问题是咋个回事,http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=47523 ...

已回复。

新手

5 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
发表于 2016-7-19 10:49:04 | 显示全部楼层
meatball1982 发表于 2016-7-15 11:21
LZ的数据,第一部分是usr color,第二部分是x,第三部分是y.
三个思路,
1,每次画一小段(两个点边在一起 ...

请教一下,
  1. surface([x;x],[y;y],[z;z])
复制代码
画出来的为什么是二维的图呢?理解不了。烦请解释一下。谢谢。

MATLAB 基础讨论
版块优秀回答者

中级

547 麦片

财富积分


5001500


71

主题

1428

帖子

103

最佳答案
  • 关注者: 68
发表于 2016-7-19 11:29:09 | 显示全部楼层
shanchuan 发表于 2016-7-19 10:49
请教一下,画出来的为什么是二维的图呢?理解不了。烦请解释一下。谢谢。 ...

surface画的是三维的图。只是上面的一句。

z = zeros(size(x));

把三维的数据的Z都设置成0了。
就是在xoy平面画,于是就变成所谓的2维了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

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