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:如何在每个数据点获得不同颜色的散点图中设置图例的颜色?