ROOT学习——展示如何组合各种Candle图选项的示例(candlehisto.C)

蜡烛图又称日本线、K线、阴阳线、棒线等,目前常用的说法百是“K线”以下统称K线。K线源于日本德川幕府时代(1603~1867年)的米市交易,用来计算米价每天的涨跌,后来把它引入股票市场价格走势的分析中,目前已成为股票、外汇技术分析中的重要方法。是技术分析的一种,最早为日本人于十九世纪所度创,被当时日本米市的商人用来记录米市的行知情与价格波动,包括开市价、收市价、最高价及最低价,阳烛代表当日升市,阴烛代表跌市。这种图表分析法在当时的中国以至整个东南亚地区均尤为流行。由于用这种方法绘制出来的图表形状颇似一根根蜡烛道,加上这些蜡烛有黑白之分,因而也叫阴阳线图表。通过K线图,人们能够把每日或某一周期的市况表现完全记录下来,股价经过一段时间的盘档后,在图上即形成一种特殊区域或形版态,不同的形态显示出不同意义。可以从这些形态的变化中摸索出一些有规律的东西出来。权K线图形态可分为反转形态、整理形态及缺口和趋向线等。后K线图因其细腻独到的标画方式而被引入到股市及期货市场。

小提琴图 (Violin Plot) 用于显示数据分布及其概率密度。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。中间白点为中位数,中间的黑色粗条表示四分位数范围。上下贯穿小提琴图的黑线代表最小非异常值min到最大非异常值max的区间,线上下端分别代表上限和下限,超出此范围为异常数据。(或者,从黑色粗条延伸的细黑线代表 95% 置信区间)

下面给出具体代码步骤:

新建一块画布:

TCanvas *c1 = new TCanvas("c1", "Candle Presets", 800, 600);

将画布横向分为三块,纵向分为两块:

c1->Divide(3, 2);

创建随机数:

TRandom *rng = new TRandom();

新建二维直方图:

TH2I *h1 = new TH2I("h1", "Sin", 18, 0, 360, 100, -1.5, 1.5);

设置x标题:

h1->GetXaxis()->SetTitle("Deg");

利用随机数高斯填充直方图:

float myRand;
for (int i = 0; i < 360; i+= 10) {
   for (int j = 0; j < 100; j++) {
      myRand = rng->Gaus(sin(i * 3.14 / 180), 0.2);
      h1->Fill(i, myRand);
   }
}

作出6种类型格式的Candle图:

for (int i = 1; i < 7; i++) {
   c1->cd(i);
   TString title = TString::Format("CANDLEX%d", i);
   TH2I *myhist = (TH2I*)h1->DrawCopy(title);
   myhist->SetTitle(title);
}

创建第二块画布:

TCanvas *c2 = new TCanvas("c2", "Violin Presets", 800, 300);

将画布分为两个区域:

c2->Divide(2, 1);

作出两种不同类型的Violin图:

for (int i = 1; i < 3; i++) {
   c2->cd(i);
   TString title = TString::Format("VIOLINX%d", i);
   TH2I *myhist = (TH2I*)h1->DrawCopy(title);
   myhist->SetFillColor(kGray + 2);
}

创建第三张画布:

TCanvas *c3 = new TCanvas("c3", "Playing with candle and violin-options", 800, 600);

将画布横向分为三块,纵向分为两块:

c3->Divide(3, 2);

作出6中不同类型的Candle图:

TString myopt[6] = {"1000000", "2000000", "3000000", "1112111", "112111", "112111"};
for (int i = 0; i < 6; i++) {
   c3->cd(i + 1);
   TString title = TString::Format("candlex(%s)", myopt[i].Data());
   TH2I *myhist = (TH2I*)h1->DrawCopy(title);
   myhist->SetFillColor(kYellow);
   if (i == 4) {
      TH2I *myhist2 = (TH2I*)h1->DrawCopy("candlex(1000000) same");
      myhist2->SetFillColor(kRed);
   }
   if (i == 5) {
      myhist->SetBarWidth(0.2);
      myhist->SetBarOffset(0.25);
      TH2I *myhist2 = (TH2I*)h1->DrawCopy("candlex(2000000) same");
      myhist2->SetFillColor(kRed);
      myhist2->SetBarWidth(0.6);
      myhist2->SetBarOffset(-0.5);
   }
   myhist->SetTitle(title);
}

代码地址:https://github.com/root-project/root/blob/master/tutorials/hist/candlehisto.C

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值