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

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

效果

讲解

首先来看官网的例子哈:

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V9GO4Y6H-1658909385252)(https://files.mdnice.com/user/23963/6127d89a-4a14-43dd-a7a4-6631355bf173.png)]
后面的'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);


猜你喜欢

转载自blog.csdn.net/slandarer/article/details/126017136