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

Posted slandarer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);


以上是关于MATLAB如何将k线图设置为经典红绿配色?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab:如何在每个数据点获得不同颜色的散点图中设置图例的颜色?

如何使用 UIBezierPath 创建带有数据点的曲线图?

MATLAB | 可视化 | 藏在风景里的k线图

MATLAB | 可视化 | 藏在风景里的k线图

MATLAB | 可视化 | 藏在风景里的k线图

如何在 Plotly 中添加跟踪,并为沿 x 轴的每个数据点设置自定义顺序?