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

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

效果

讲解

首先来看官网的例子哈:

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);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

slandarer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值