最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Matlab繪制優(yōu)美的k線圖

 更新時(shí)間:2022年10月08日 14:42:34   作者:slandarer  
本期又是一個(gè)花里胡哨的數(shù)據(jù)可視化,前兩天刷到了耐克的視覺設(shè)計(jì)師Gladys Orteza繪制的k線圖作品,把沉悶的股票圖變成了精彩的風(fēng)景,但是那些大部分是真的完全看不清,我這里挑選了幾個(gè)能看清的k線圖風(fēng)格將其用MATLAB進(jìn)行了實(shí)現(xiàn)

本期又是一個(gè)花里胡哨的數(shù)據(jù)可視化,前兩天刷到了耐克的視覺設(shè)計(jì)師Gladys Orteza繪制的k線圖作品,把沉悶的股票圖變成了精彩的風(fēng)景,但是那些大部分是真的完全看不清,我這里挑選了幾個(gè)能看清的k線圖風(fēng)格將其用MATLAB進(jìn)行了實(shí)現(xiàn)。

效果

代碼

代碼中使用的數(shù)據(jù)

SimulatedStock.mat

是MATLAB自帶的示例數(shù)據(jù),因此不需要下載,不過要繪制k線圖,仍需安裝Financial Toolbox工具箱。

效果一 極光

% @author : slandarer
% gzh  : slandarer隨筆

load SimulatedStock.mat;
Data=TMW(end-200:end-50,:);
CHdl=candle(Data,'b');
title('Candlestick chart for TMW')


% 坐標(biāo)區(qū)域基礎(chǔ)修飾 =========================================================
fig=gcf;
set(fig,'Units','normalized','Position',[.1,.1,.7,.6])
ax=gca;hold on;axis tight
YLim=ax.YLim;
ax.YLim=ax.YLim+[-1.5,1].*diff(YLim);
YLim=ax.YLim;
XLim=ax.XLim;
ax.PlotBoxAspectRatio=[2,1,1];
ax.Color=[0,0,0];
maxY=YLim(1)+diff(YLim)*1.5/3.5;
minY=YLim(1)+diff(YLim)/4.5;

% 繪制背景 =================================================================
matSize=[300,300];
colorList=[1,1,2;16,20,49;33,42,101;37,64,119;24,99,104;24,99,104;12,148,86;1,1,2;1,1,2]./255;
YList=((0:(matSize(2)-1))./(matSize(2)-1))';
XList=ones(1,matSize(1));
% 線性插值
colorMat(:,:,1)=interp1(linspace(0,1,size(colorList,1)),colorList(:,1),YList)*XList;
colorMat(:,:,2)=interp1(linspace(0,1,size(colorList,1)),colorList(:,2),YList)*XList;
colorMat(:,:,3)=interp1(linspace(0,1,size(colorList,1)),colorList(:,3),YList)*XList;
[XMesh,YMesh]=meshgrid(linspace(XLim(1),XLim(2),300),linspace(YLim(2),YLim(1),300));
surf(XMesh,YMesh,zeros(size(XMesh)),colorMat,'EdgeColor','none');

matSize=[300,300];
colorList=[26,110,106;26,110,106;35,72,118;33,40,95;16,22,56;1,1,1;1,1,1]./255;
YList=((0:(matSize(2)-1))./(matSize(2)-1))';
XList=ones(1,matSize(1));
% 線性插值
colorMat(:,:,1)=interp1(linspace(0,1,size(colorList,1)),colorList(:,1),YList)*XList;
colorMat(:,:,2)=interp1(linspace(0,1,size(colorList,1)),colorList(:,2),YList)*XList;
colorMat(:,:,3)=interp1(linspace(0,1,size(colorList,1)),colorList(:,3),YList)*XList;
[XMesh,YMesh]=meshgrid(linspace(XLim(1),XLim(2),300),linspace(minY+(maxY-minY)/10,YLim(1),300));
surf(XMesh,YMesh,zeros(size(XMesh)),colorMat,'EdgeColor','none','FaceAlpha',.5);

% 繪制星星 =================================================================
Xs=diff(XLim).*rand([20,1])+XLim(1);
Ys=(YLim(2)-maxY).*rand([20,1])+maxY;
scatter(Xs,Ys,3,'filled','CData',[.8,.8,.8]);
Xs=diff(XLim).*rand([20,1])+XLim(1);
Ys=(YLim(2)-maxY).*rand([20,1])+maxY;
scatter(Xs,Ys,5,'filled','CData',[.6,.6,.6]);

% 修改蠟燭圖配色 ===========================================================
rColor=[242,218,128]./255;
gColor=[9,28,48]./255; 

% 獲取豎直線數(shù)據(jù)
LineHdl=CHdl(1);
LineDataX=reshape(LineHdl.XData,3,[]);
LineDataY=reshape(LineHdl.YData,3,[]);
fill([LineDataX(1,1),LineDataX(1,:),LineDataX(1,end)],...
    [minY,LineDataY(1,:),minY],[10,28,48]./270);

for i=2:length(CHdl)
    if CHdl(i).FaceColor(1)==1
        plot(LineDataX(:,i-1),LineDataY(:,i-1),'Color',rColor)
        fill(CHdl(i).XData,CHdl(i).YData,rColor,'EdgeColor',rColor)
    else
        plot(LineDataX(:,i-1),LineDataY(:,i-1),'Color',gColor)
        fill(CHdl(i).XData,CHdl(i).YData,gColor,'EdgeColor',gColor)
    end
end 
delete(LineHdl);

% 繪制柱狀圖 ===============================================================
YData=Data.Close-Data.Open;
absYData=abs(YData);
absYData1=absYData./(max(absYData)-min(absYData)).*(maxY-minY)+minY;
absYData2=-absYData./(max(absYData)-min(absYData)).*(maxY-minY)+minY;
fill([LineDataX(1,1),LineDataX(1,:),LineDataX(1,end)],...
    [YLim(1)+diff(YLim)/4.5,absYData1(:).',YLim(1)+diff(YLim)/4.5],[.01,.01,.01]);
disp(char([64 97 117 116 104 111 114 32 58 32 115 108 97 110 100 97 114 101 114]))
bar(Data.Time(YData>0),absYData1(YData>0),'BaseValue',minY,'EdgeColor','none','FaceColor',[29,170,112]./255);
bar(Data.Time(YData<0),absYData1(YData<0),'BaseValue',minY,'EdgeColor','none','FaceColor',[23,105,103]./255);
bar(Data.Time(YData>0),absYData2(YData>0),'BaseValue',minY,'EdgeColor','none','FaceColor',[29,170,112]./255,'FaceAlpha',.6);
bar(Data.Time(YData<0),absYData2(YData<0),'BaseValue',minY,'EdgeColor','none','FaceColor',[23,105,103]./255,'FaceAlpha',.6);
xq=linspace(XLim(1),XLim(2),15);
yq=interp1(LineDataX(1,:),absYData1,xq,'spline');
scatter(xq,yq,15,'filled','CData',[128,169,90]./255)

效果二 暖調(diào)

% @author : slandarer
% gzh  : slandarer隨筆

load SimulatedStock.mat;
Data=TMW(end-200:end-50,:);
CHdl=candle(Data,'b');
title('Candlestick chart for TMW')


% 坐標(biāo)區(qū)域基礎(chǔ)修飾 =========================================================
fig=gcf;
set(fig,'Units','normalized','Position',[.1,.1,.7,.6])
ax=gca;hold on;axis tight;grid off
YLim=ax.YLim;
ax.YLim=ax.YLim+[-3,1].*diff(YLim);
YLim=ax.YLim;
XLim=ax.XLim;
ax.PlotBoxAspectRatio=[2,1,1];
ax.Color=[249,222,203]./255;
ax.TickLength=[0,0];
maxY=YLim(1)+diff(YLim)*3/5;
minY=YLim(1)+diff(YLim)*2/5;



% 修改蠟燭圖配色 ===========================================================
rColor=[133,168,142]./255;
gColor=[9,28,48]./255; 

% 獲取豎直線數(shù)據(jù)
LineHdl=CHdl(1);
LineDataX=reshape(LineHdl.XData,3,[]);
ax.XLim=[LineDataX(1,1),LineDataX(1,end)];
LineDataY=reshape(LineHdl.YData,3,[]);
scatter(XLim(1)+diff(XLim)/6,YLim(2)-diff(YLim)/8,500,'filled','CData',[254,247,241]./255)
fill([LineDataX(1,1)-1,LineDataX(1,1)-1,LineDataX(1,:),LineDataX(1,end)+1,LineDataX(1,end)+1],...
    [minY,LineDataY(1,1),LineDataY(1,:),LineDataY(1,end),minY],[173,198,169]./270,'EdgeColor','none');

for i=2:length(CHdl)
    if CHdl(i).FaceColor(1)==1
        plot(LineDataX(:,i-1),LineDataY(:,i-1),'Color',rColor)
        fill(CHdl(i).XData,CHdl(i).YData,rColor,'EdgeColor',rColor)
    else
        plot(LineDataX(:,i-1),LineDataY(:,i-1),'Color',gColor)
        fill(CHdl(i).XData,CHdl(i).YData,gColor,'EdgeColor',gColor)
    end
end 
delete(LineHdl);
fill([XLim(1)-1,XLim(2)+1,XLim(2)+1,XLim(1)-1],[YLim(1),YLim(1),minY,minY],[134,168,152]./255,'EdgeColor','none')


% 繪制柱狀圖 ===============================================================
YData=Data.Close-Data.Open;
absYData=abs(YData);
absYData1=absYData./(max(absYData)-min(absYData)).*(maxY-minY)+minY;
absYData2=-absYData./(max(absYData)-min(absYData)).*(maxY-minY)+minY;
disp(char([64 97 117 116 104 111 114 32 58 32 115 108 97 110 100 97 114 101 114]))
bar(Data.Time(YData>0),absYData1(YData>0),'BaseValue',minY,'EdgeColor','none','FaceColor',[140,141,127]./255,'BarWidth',1);
bar(Data.Time(YData<0),absYData1(YData<0),'BaseValue',minY,'EdgeColor','none','FaceColor',[76,79,60]./255,'BarWidth',1);


% 繪制下方山脈 =============================================================
layerBEPos=linspace(minY,YLim(1),6)';layerBEPos([1,end])=[];
layerColor=[107,144,136;97,103,103;57,82,86;14,23,22]./255;
disp(char([64 97 117 116 104 111 114 32 58 32 115 108 97 110 100 97 114 101 114]))
excursion=diff(YLim)/30;
interval=diff(YLim)/50;

pieceNum=30;
layerPos=zeros(size(layerBEPos,1),pieceNum);
layerPos(:,1)=layerBEPos(:,1);
layerPos=[ones(1,pieceNum).*minY;layerPos];

minX=LineDataX(1,1)-1;
maxX=LineDataX(1,end)+1;

for i=2:size(layerBEPos,1)+1
    k=2;
    for j=1:pieceNum-1
        tempRandi=excursion*2*rand(1)-excursion;
        yPos=tempRandi+layerPos(i,k-1);
        if i>1&&yPos>=layerPos(i-1,k)-diff(YLim)/100
            yPos=layerPos(i-1,k)-interval;
        end
        yPos(yPos<YLim(1))=YLim(1);
        layerPos(i,k)=yPos;
        k=k+1;
    end   
end
for i=2:size(layerBEPos,1)+1
    XData=linspace(minX,maxX,pieceNum);
    YData=layerPos(i,:);
    Yq=interp1(XData,YData,linspace(minX,maxX,200),'spline');
    Xq=[minX,linspace(minX,maxX,200),maxX];
    Yq=[YLim(1),Yq,YLim(1)];
    fill(Xq,Yq,layerColor(i-1,:),'EdgeColor','none')
end

效果三 黑白

% @author : slandarer
% gzh  : slandarer隨筆

load SimulatedStock.mat;
Data=TMW(end-200:end-50,:);
CHdl=candle(Data,'b');
title('Candlestick chart for TMW')


% 坐標(biāo)區(qū)域基礎(chǔ)修飾 =========================================================
fig=gcf;
set(fig,'Units','normalized','Position',[.1,.1,.6,.8])
ax=gca;hold on;axis tight;grid off
YLim=ax.YLim;
ax.YLim=ax.YLim+[-3,6].*diff(YLim);
YLim=ax.YLim;
XLim=ax.XLim;
ax.PlotBoxAspectRatio=[1,1,1];
ax.Color=[0,0,0]./255;
ax.TickLength=[0,0];
maxY=YLim(1)+diff(YLim)*2.5/10;
minY=YLim(1)+diff(YLim)*1.5/10;

% 繪制星星 =================================================================
Xs=diff(XLim).*rand([50,1])+XLim(1);
Ys=(YLim(2)-maxY).*rand([50,1])+maxY;
scatter(Xs,Ys,3,'filled','CData',[.9,.9,.9]);
Xs=diff(XLim).*rand([50,1])+XLim(1);
Ys=(YLim(2)-maxY).*rand([50,1])+maxY;
scatter(Xs,Ys,5,'filled','CData',[.7,.7,.7]);

% 修改蠟燭圖配色 ===========================================================
rColor=[255,255,255]./255;
gColor=[9,28,48]./255; 
% 獲取豎直線數(shù)據(jù)
LineHdl=CHdl(1);
LineDataX=reshape(LineHdl.XData,3,[]);
ax.XLim=[LineDataX(1,1),LineDataX(1,end)];
LineDataY=reshape(LineHdl.YData,3,[]);
scatter(XLim(1)+diff(XLim)/6,YLim(2)-diff(YLim)/8,500,'filled','CData',[254,247,241]./255)
fill([XLim(1)-3,XLim(2)+3,XLim(2)+3,XLim(1)-3],[YLim(1),YLim(1),minY,minY],[255,255,255]./255,'EdgeColor','none')
fill([LineDataX(1,1)-3,LineDataX(1,1)-3,LineDataX(1,:),LineDataX(1,end)+3,LineDataX(1,end)+3],...
    [minY,LineDataY(1,1),LineDataY(1,:),LineDataY(1,end),minY],[255,255,255]./270);

for i=2:length(CHdl)
    if CHdl(i).FaceColor(1)==1
        plot(LineDataX(:,i-1),LineDataY(:,i-1),'Color',rColor)
        fill(CHdl(i).XData,CHdl(i).YData,rColor,'EdgeColor',rColor)
    else
        plot(LineDataX(:,i-1),LineDataY(:,i-1),'Color',gColor)
        fill(CHdl(i).XData,CHdl(i).YData,gColor,'EdgeColor',gColor)
    end
end 
delete(LineHdl);

% 繪制柱狀圖 ===============================================================
YData=Data.Close-Data.Open;
absYData=abs(YData);
absYData1=absYData./(max(absYData)-min(absYData)).*(maxY-minY)+minY;
absYData2=-absYData./(max(absYData)-min(absYData)).*(maxY-minY)+minY;
disp(char([64 97 117 116 104 111 114 32 58 32 115 108 97 110 100 97 114 101 114]))
bar(Data.Time(YData>0),absYData1(YData>0),'BaseValue',minY,'EdgeColor','none','FaceColor',[10,10,10]./255,'BarWidth',1);
bar(Data.Time(YData<0),absYData1(YData<0),'BaseValue',minY,'EdgeColor','none','FaceColor',[76,79,60]./255,'BarWidth',1);


% 繪制下方山脈 =============================================================
layerBEPos=linspace(minY,YLim(1),4)';layerBEPos([1,end])=[];
layerColor=[255,255,255;10,10,10]./255;
disp(char([64 97 117 116 104 111 114 32 58 32 115 108 97 110 100 97 114 101 114]))
excursion=diff(YLim)/40;
interval=diff(YLim)/50;

pieceNum=30;
layerPos=zeros(size(layerBEPos,1),pieceNum);
layerPos(:,1)=layerBEPos(:,1);
layerPos=[ones(1,pieceNum).*minY;layerPos];

minX=LineDataX(1,1)-1;
maxX=LineDataX(1,end)+1;

for i=2:size(layerBEPos,1)+1
    k=2;
    for j=1:pieceNum-1
        tempRandi=excursion*2*rand(1)-excursion;
        yPos=tempRandi+layerPos(i,k-1);
        if i>1&&yPos>=layerPos(i-1,k)-diff(YLim)/100
            yPos=layerPos(i-1,k)-interval;
        end
        yPos(yPos<YLim(1))=YLim(1);
        layerPos(i,k)=yPos;
        k=k+1;
    end   
end
for i=2:size(layerBEPos,1)+1
    XData=linspace(minX,maxX,pieceNum);
    YData=layerPos(i,:);
    Yq=interp1(XData,YData,linspace(minX,maxX,200),'spline');
    Xq=[minX,linspace(minX,maxX,200),maxX];
    Yq=[YLim(1),Yq,YLim(1)];
    fill(Xq,Yq,layerColor(i-1,:),'EdgeColor',[.4,.4,.4],'LineWidth',.8)
end

到此這篇關(guān)于利用Matlab繪制優(yōu)美的k線圖的文章就介紹到這了,更多相關(guān)Matlab繪制k線圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談C++STL之雙端隊(duì)列容器

    淺談C++STL之雙端隊(duì)列容器

    deque雙端隊(duì)列容器與vector很類似,采用線性表順序存儲(chǔ)結(jié)構(gòu)。但與vector區(qū)別,deque采用分塊的線性存儲(chǔ)結(jié)構(gòu)來存儲(chǔ)數(shù)據(jù),每塊的大小一般為512B,將之稱為deque塊,所有的deque塊使用一個(gè)map塊進(jìn)行管理,每個(gè)map數(shù)據(jù)項(xiàng)記錄各個(gè)deque塊的首地址。
    2021-06-06
  • 詳解C語言之動(dòng)態(tài)內(nèi)存管理

    詳解C語言之動(dòng)態(tài)內(nèi)存管理

    本文主要介紹了C語言動(dòng)態(tài)內(nèi)存管理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++初階之list的模擬實(shí)現(xiàn)過程詳解

    C++初階之list的模擬實(shí)現(xiàn)過程詳解

    在C++中我們經(jīng)常使用STL,那個(gè)在那些我們常用的數(shù)據(jù)結(jié)構(gòu)vector,list的背后,又是如何實(shí)現(xiàn)的呢?這篇文章主要給大家介紹了關(guān)于C++初階之list的模擬實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • c++中vector<int>和vector<int*>的用法及區(qū)別

    c++中vector<int>和vector<int*>的用法及區(qū)別

    這篇文章主要介紹了c++中vector<int>和vector<int*>的用法及區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2013-10-10
  • 淺談C++性能榨汁機(jī)之偽共享

    淺談C++性能榨汁機(jī)之偽共享

    使給定內(nèi)存位置被一個(gè)線程所訪問,可能還是會(huì)有乒乓緩存的存在,是因?yàn)榱硪环N叫做偽共享(false sharing)的效應(yīng)。即使數(shù)據(jù)存儲(chǔ)在緩存行中,多個(gè)線程對(duì)數(shù)據(jù)中的成員進(jìn)行訪問時(shí),硬件緩存還是會(huì)產(chǎn)生乒乓緩存。本文將介紹C++中的偽共享
    2021-06-06
  • 詳解C++中如何將構(gòu)造函數(shù)或析構(gòu)函數(shù)的訪問權(quán)限定為private

    詳解C++中如何將構(gòu)造函數(shù)或析構(gòu)函數(shù)的訪問權(quán)限定為private

    這篇文章主要介紹了詳解C++中如何將構(gòu)造函數(shù)或析構(gòu)函數(shù)的訪問權(quán)限定為private的方法,文中還解釋了構(gòu)造函數(shù)與虛函數(shù)的區(qū)別,需要的朋友可以參考下
    2016-03-03
  • C 語言基礎(chǔ)----詳解C中的運(yùn)算符

    C 語言基礎(chǔ)----詳解C中的運(yùn)算符

    這篇文章主要介紹了C語言中的運(yùn)算符,文中講解非常詳細(xì),適合初學(xué)小白進(jìn)行學(xué)習(xí),想入門C語言的朋友不妨了解下
    2020-06-06
  • c++傳輸文件到不同計(jì)算機(jī)上的示例代碼

    c++傳輸文件到不同計(jì)算機(jī)上的示例代碼

    這篇文章主要為大家詳細(xì)介紹了c++傳輸文件到不同計(jì)算機(jī)上的相關(guān)知識(shí),文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • C/C++中CONST用法總結(jié)(推薦)

    C/C++中CONST用法總結(jié)(推薦)

    這篇文章主要介紹了C/C++中CONST用法總結(jié)(推薦),包括const常量與define宏定義的區(qū)別介紹,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-07-07
  • C++語言實(shí)現(xiàn)線性表之?dāng)?shù)組實(shí)例

    C++語言實(shí)現(xiàn)線性表之?dāng)?shù)組實(shí)例

    這篇文章主要介紹了C++語言實(shí)現(xiàn)線性表之?dāng)?shù)組,實(shí)例分析了C++實(shí)現(xiàn)數(shù)組形式線性表的原理與方法,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

乾安县| 红桥区| 夏河县| 聂荣县| 洪雅县| 石首市| 石狮市| 安康市| 绥芬河市| 台中市| 苍南县| 余姚市| 万宁市| 朝阳市| 镇赉县| 伊川县| 二手房| 大埔县| 昌黎县| 海晏县| 贡觉县| 会同县| 顺昌县| 广灵县| 临洮县| 托里县| 贺州市| 云安县| 孝义市| 马山县| 房产| 永仁县| 沂南县| 唐河县| 泗洪县| 霍城县| 连山| 鹰潭市| 贵阳市| 锦州市| 永城市|