您当前的位置: 首页 >  matlab

slandarer

暂无认证

  • 0浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MATLAB如何将k线图设置为经典红绿配色?

slandarer 发布时间:2022-07-27 16:10:48 ,浏览量:0

一个简单的图形对象属性设置小实例?

效果

讲解

首先来看官网的例子哈:

load SimulatedStock.mat;
candle(TMW(end-20:end,:),'b')

后面的'b'就是'blue'蓝色,当然可以设置为'k'黑色,'r'红色等一系列颜色,但是这样的设置方式的绘图结果依旧是只有k线跌的时候有颜色,涨的时候颜色是空白的,我们想要的是涨和跌分别设为不同颜色。

首先我们获取一下candle函数的返回值:

CHdl=candle(TMW(end-20:end,:),'b')

我们能够发现返回了一条线及一堆多边形,嗯?多边形的数量对上了,但是线只有一条??,我们get一下那条线的属性:

get(CHdl(1)) 

我们会发现每两个数据点之间都有个NaN,怪不得只用一条线就能生成二十多条线,原来其实还是一条线只不过各个线之间的链接被用NaN替换掉了,要是数据没有用NaN隔开,那么那条线是这样的:

因此不包含NaN的每两个数据点就可以画出把一条线(或者包含NaN的三个数据点)。

啊这样就非常简单了,就循环检查一下每个方形是白色还是蓝色,如果是白色,就将方形的面颜色FaceColor、轮廓颜色EdgeColor、以及对应竖直线的颜色Color,修改为红色,否则修改为绿色即可,代码非常简短:

完整代码
load SimulatedStock.mat;
CHdl=candle(TMW(end-20:end,:),'b');

rColor=[208,48,53]./255; % 红色
gColor=[55,173,55]./255; % 绿色

% 获取竖直线数据
LineHdl=CHdl(1);
LineDataX=reshape(LineHdl.XData,3,[]);
LineDataY=reshape(LineHdl.YData,3,[]);

hold on
% 若原本颜色是白色则改为红色,蓝色则改为绿色
for i=2:length(CHdl)
    if CHdl(i).FaceColor(1)==1
        plot(LineDataX(:,i-1),LineDataY(:,i-1),'Color',rColor)
        CHdl(i).FaceColor=rColor;
        CHdl(i).EdgeColor=rColor;
    else
        plot(LineDataX(:,i-1),LineDataY(:,i-1),'Color',gColor)
        CHdl(i).FaceColor=gColor;
        CHdl(i).EdgeColor=gColor;
    end
end 
% 删除原本的竖直线
delete(LineHdl);

关注
打赏
1664692598
查看更多评论
立即登录/注册

微信扫码登录

0.0383s