# 2.3 属性设置

`TStyle`是用来定义绘图风格的类，它包含所有元素的各种属性设置，如颜色、宽度、填充、字体等，从而创建出符合用户需求的效果。但是<mark style="color:red;">**`TStyle`**</mark><mark style="color:red;">**是用于设置全局绘图样式的类，在局部设置中，全局设置**</mark><mark style="color:red;">**`TStyle`**</mark><mark style="color:red;">**会被覆盖，导致**</mark><mark style="color:red;">**`TStyle`**</mark><mark style="color:red;">**的设置不生效。所以本章介绍的成员函数均以局部设置的类下呈现。**</mark>

**TStyle 的成员函数：**

```bash
root [1] TStyle::Set
```

<details>

<summary>汇总</summary>

<table><thead><tr><th width="224.73828125">函数名</th><th>说明或作用</th></tr></thead><tbody><tr><td><code>SetAxisColor</code></td><td>设置轴线颜色</td></tr><tr><td><code>SetBarOffset</code></td><td>设置条形图的偏移量</td></tr><tr><td><code>SetBarWidth</code></td><td>设置条形图的宽度</td></tr><tr><td><code>SetBit</code></td><td>设置位标志</td></tr><tr><td><code>SetCanvasBorderMode</code></td><td>设置画布边框形式</td></tr><tr><td><code>SetCanvasBorderSize</code></td><td>设置画布边框大小</td></tr><tr><td><code>SetCanvasColor</code></td><td>设置画布颜色</td></tr><tr><td><code>SetCanvasDefH</code></td><td>设置画布的默认高度</td></tr><tr><td><code>SetCanvasDefW</code></td><td>设置画布的默认宽度</td></tr><tr><td><code>SetCanvasDefX</code></td><td>设置画布的默认 X 位置</td></tr><tr><td><code>SetCanvasDefY</code></td><td>设置画布的默认 Y 位置</td></tr><tr><td><code>SetCanvasPreferGL</code></td><td>设置是否优先使用 OpenGL 渲染画布</td></tr><tr><td><code>SetCapLinePS</code></td><td>设置 PostScript 中线条的端点样式</td></tr><tr><td><code>SetColorModelPS</code></td><td>设置 PostScript 的颜色模型</td></tr><tr><td><code>SetDateX</code></td><td>设置 X 轴日期显示</td></tr><tr><td><code>SetDateY</code></td><td>设置 Y 轴日期显示</td></tr><tr><td><code>SetDrawBorder</code></td><td>设置是否绘制边框</td></tr><tr><td><code>SetDrawOption</code></td><td>设置绘图选项</td></tr><tr><td><code>SetDtorOnly</code></td><td>设置仅调用析构函数</td></tr><tr><td><code>SetEndErrorSize</code></td><td>设置误差条末端的大小</td></tr><tr><td><code>SetErrorX</code></td><td>设置 X 轴误差条</td></tr><tr><td><code>SetFillAttributes</code></td><td>设置填充属性</td></tr><tr><td><code>SetFillColor</code></td><td>设置填充颜色</td></tr><tr><td><code>SetFillColorAlpha</code></td><td>设置填充颜色的透明度</td></tr><tr><td><code>SetFillStyle</code></td><td>设置填充样式</td></tr><tr><td><code>SetFitFormat</code></td><td>设置拟合结果的格式</td></tr><tr><td><code>SetFrameBorderMode</code></td><td>设置框架边框模式</td></tr><tr><td><code>SetFrameBorderSize</code></td><td>设置框架边框大小</td></tr><tr><td><code>SetFrameFillColor</code></td><td>设置框架内部填充色</td></tr><tr><td><code>SetFrameFillStyle</code></td><td>设置框架内部填充风格</td></tr><tr><td><code>SetFrameLineColor</code></td><td>设置框架线条颜色</td></tr><tr><td><code>SetFrameLineStyle</code></td><td>设置框架线条样式</td></tr><tr><td><code>SetFrameLineWidth</code></td><td>设置框架线条宽度</td></tr><tr><td><code>SetFuncColor</code></td><td>设置函数线条颜色</td></tr><tr><td><code>SetFuncStyle</code></td><td>设置函数线条样式</td></tr><tr><td><code>SetFuncWidth</code></td><td>设置函数线条宽度</td></tr><tr><td><code>SetGridColor</code></td><td>设置网格颜色</td></tr><tr><td><code>SetGridStyle</code></td><td>设置网格样式</td></tr><tr><td><code>SetGridWidth</code></td><td>设置网格宽度</td></tr><tr><td><code>SetHatchesLineWidth</code></td><td>设置阴影线宽度</td></tr><tr><td><code>SetHatchesSpacing</code></td><td>设置阴影线间距</td></tr><tr><td><code>SetHeaderPS</code></td><td>设置 PostScript 文件头</td></tr><tr><td><code>SetHistFillColor</code></td><td>设置直方图填充色</td></tr><tr><td><code>SetHistFillStyle</code></td><td>设置直方图填充风格</td></tr><tr><td><code>SetHistLineColor</code></td><td>设置直方图线条颜色</td></tr><tr><td><code>SetHistLineStyle</code></td><td>设置直方图线条样式</td></tr><tr><td><code>SetHistLineWidth</code></td><td>设置直方图线条宽度</td></tr><tr><td><code>SetHistMinimumZero</code></td><td>设置直方图 Y 轴最小值是否强制为 0</td></tr><tr><td><code>SetHistTopMargin</code></td><td>设置直方图顶部边距</td></tr><tr><td><code>SetImageScaling</code></td><td>设置图像缩放比例</td></tr><tr><td><code>SetIsReading</code></td><td>设置是否正在读取</td></tr><tr><td><code>SetJoinLinePS</code></td><td>设置 PostScript 中线条的连接样式</td></tr><tr><td><code>SetLabelColor</code></td><td>设置标签颜色</td></tr><tr><td><code>SetLabelFont</code></td><td>设置标签字体</td></tr><tr><td><code>SetLabelOffset</code></td><td>设置标签偏移量</td></tr><tr><td><code>SetLabelSize</code></td><td>设置标签大小</td></tr><tr><td><code>SetLegendBorderSize</code></td><td>设置图例边框大小</td></tr><tr><td><code>SetLegendFillColor</code></td><td>设置图例填充颜色</td></tr><tr><td><code>SetLegendFont</code></td><td>设置图例字体</td></tr><tr><td><code>SetLegendTextSize</code></td><td>设置图例文本大小</td></tr><tr><td><code>SetLegoInnerR</code></td><td>设置乐高图内部半径</td></tr><tr><td><code>SetLineAttributes</code></td><td>设置线条属性</td></tr><tr><td><code>SetLineColor</code></td><td>设置线条颜色</td></tr><tr><td><code>SetLineColorAlpha</code></td><td>设置线条颜色的透明度</td></tr><tr><td><code>SetLineScalePS</code></td><td>设置 PostScript 中线条的缩放比例</td></tr><tr><td><code>SetLineStyle</code></td><td>设置线条样式</td></tr><tr><td><code>SetLineStyleString</code></td><td>设置线条样式的字符串表示</td></tr><tr><td><code>SetLineWidth</code></td><td>设置线条宽度</td></tr><tr><td><code>SetMarkerAttributes</code></td><td>设置标记属性</td></tr><tr><td><code>SetMarkerColor</code></td><td>设置标记颜色</td></tr><tr><td><code>SetMarkerColorAlpha</code></td><td>设置标记颜色的透明度</td></tr><tr><td><code>SetMarkerSize</code></td><td>设置标记大小</td></tr><tr><td><code>SetMarkerStyle</code></td><td>设置标记样式</td></tr><tr><td><code>SetName</code></td><td>设置名称</td></tr><tr><td><code>SetNameTitle</code></td><td>设置名称和标题</td></tr><tr><td><code>SetNdivisions</code></td><td>设置轴的分割数</td></tr><tr><td><code>SetNumberContours</code></td><td>设置等高线的数量</td></tr><tr><td><code>SetObjectStat</code></td><td>设置对象统计信息</td></tr><tr><td><code>SetOptDate</code></td><td>设置是否显示日期</td></tr><tr><td><code>SetOptFile</code></td><td>设置文件选项</td></tr><tr><td><code>SetOptFit</code></td><td>设置拟合选项</td></tr><tr><td><code>SetOptLogx</code></td><td>设置 X 轴是否为对数刻度</td></tr><tr><td><code>SetOptLogy</code></td><td>设置 Y 轴是否为对数刻度</td></tr><tr><td><code>SetOptLogz</code></td><td>设置 Z 轴是否为对数刻度</td></tr><tr><td><code>SetOptStat</code></td><td>设置图例的内容</td></tr><tr><td><code>SetOptTitle</code></td><td>设置是否显示标题</td></tr><tr><td><code>SetPadBorderMode</code></td><td>设置 Pad 边框模式</td></tr><tr><td><code>SetPadBorderSize</code></td><td>设置 Pad 边框大小</td></tr><tr><td><code>SetPadBottomMargin</code></td><td>设置 Pad 底部边距</td></tr><tr><td><code>SetPadColor</code></td><td>设置 Pad 颜色</td></tr><tr><td><code>SetPadGridX</code></td><td>设置 Pad 中 X 轴网格</td></tr><tr><td><code>SetPadGridY</code></td><td>设置 Pad 中 Y 轴网格</td></tr><tr><td><code>SetPadLeftMargin</code></td><td>设置 Pad 左边距</td></tr><tr><td><code>SetPadRightMargin</code></td><td>设置 Pad 右边距</td></tr><tr><td><code>SetPadTickX</code></td><td>设置 Pad 中 X 轴刻度</td></tr><tr><td><code>SetPadTickY</code></td><td>设置 Pad 中 Y 轴刻度</td></tr><tr><td><code>SetPadTopMargin</code></td><td>设置 Pad 顶部边距</td></tr><tr><td><code>SetPaintTextFormat</code></td><td>设置文本绘制格式</td></tr><tr><td><code>SetPalette</code></td><td>设置调色板</td></tr><tr><td><code>SetPaperSize</code></td><td>设置纸张大小</td></tr><tr><td><code>SetScreenFactor</code></td><td>设置屏幕缩放因子</td></tr><tr><td><code>SetStatBorderSize</code></td><td>设置统计框边框大小</td></tr><tr><td><code>SetStatColor</code></td><td>设置统计框颜色</td></tr><tr><td><code>SetStatFont</code></td><td>设置统计框字体</td></tr><tr><td><code>SetStatFontSize</code></td><td>设置统计框字体大小</td></tr><tr><td><code>SetStatFormat</code></td><td>设置统计框格式</td></tr><tr><td><code>SetStatH</code></td><td>设置统计框高度</td></tr><tr><td><code>SetStatStyle</code></td><td>设置统计框样式</td></tr><tr><td><code>SetStatTextColor</code></td><td>设置统计框文本颜色</td></tr><tr><td><code>SetStatW</code></td><td>设置统计框宽度</td></tr><tr><td><code>SetStatX</code></td><td>设置统计框 X 位置</td></tr><tr><td><code>SetStatY</code></td><td>设置统计框 Y 位置</td></tr><tr><td><code>SetStripDecimals</code></td><td>设置是否去除小数部分</td></tr><tr><td><code>SetTextAlign</code></td><td>设置文本对齐方式</td></tr><tr><td><code>SetTextAngle</code></td><td>设置文本角度</td></tr><tr><td><code>SetTextAttributes</code></td><td>设置文本属性</td></tr><tr><td><code>SetTextColor</code></td><td>设置文本颜色</td></tr><tr><td><code>SetTextColorAlpha</code></td><td>设置文本颜色的透明度</td></tr><tr><td><code>SetTextFont</code></td><td>设置文本字体</td></tr><tr><td><code>SetTextSize</code></td><td>设置文本大小</td></tr><tr><td><code>SetTextSizePixels</code></td><td>设置文本大小（以像素为单位）</td></tr><tr><td><code>SetTickLength</code></td><td>设置刻度长度</td></tr><tr><td><code>SetTimeOffset</code></td><td>设置时间偏移量</td></tr><tr><td><code>SetTitle</code></td><td>设置标题</td></tr><tr><td><code>SetTitleAlign</code></td><td>设置标题对齐方式</td></tr><tr><td><code>SetTitleBorderSize</code></td><td>设置标题边框大小</td></tr><tr><td><code>SetTitleColor</code></td><td>设置标题颜色</td></tr><tr><td><code>SetTitleFillColor</code></td><td>设置标题填充颜色</td></tr><tr><td><code>SetTitleFont</code></td><td>设置标题字体</td></tr><tr><td><code>SetTitleFontSize</code></td><td>设置标题字体大小</td></tr><tr><td><code>SetTitleH</code></td><td>设置标题高度</td></tr><tr><td><code>SetTitleOffset</code></td><td>设置标题偏移量</td></tr><tr><td><code>SetTitlePS</code></td><td>设置 PostScript 标题</td></tr><tr><td><code>SetTitleSize</code></td><td>设置标题大小</td></tr><tr><td><code>SetTitleStyle</code></td><td>设置标题样式</td></tr><tr><td><code>SetTitleTextColor</code></td><td>设置标题文本颜色</td></tr><tr><td><code>SetTitleW</code></td><td>设置标题宽度</td></tr><tr><td><code>SetTitleX</code></td><td>设置标题 X 位置</td></tr><tr><td><code>SetTitleXOffset</code></td><td>设置标题 X 偏移量</td></tr><tr><td><code>SetTitleXSize</code></td><td>设置标题 X 大小</td></tr><tr><td><code>SetTitleY</code></td><td>设置标题 Y 位置</td></tr><tr><td><code>SetTitleYOffset</code></td><td>设置标题 Y 偏移量</td></tr><tr><td><code>SetTitleYSize</code></td><td>设置标题 Y 大小</td></tr><tr><td><code>SetUniqueID</code></td><td>设置唯一标识符</td></tr></tbody></table>

</details>

填充属性包括填充颜色、填充风格、调色板等内容的设置：

{% content-ref url="2.3.1-tian-chong-shu-xing" %}
[2.3.1-tian-chong-shu-xing](https://s-klnw.gitbook.io/study-manual/2-root-guide/2.3.1-tian-chong-shu-xing)
{% endcontent-ref %}

坐标轴属性设置包括轴线、刻度、轴标题等内容的设置：

{% content-ref url="2.3.2-zuo-biao-zhou-shu-xing" %}
[2.3.2-zuo-biao-zhou-shu-xing](https://s-klnw.gitbook.io/study-manual/2-root-guide/2.3.2-zuo-biao-zhou-shu-xing)
{% endcontent-ref %}

文字属性包括颜色、字体等内容的设置：

{% content-ref url="2.3.3-wen-zi-shu-xing" %}
[2.3.3-wen-zi-shu-xing](https://s-klnw.gitbook.io/study-manual/2-root-guide/2.3.3-wen-zi-shu-xing)
{% endcontent-ref %}

## 线的属性

线的属性设置通常包含颜色、宽度、风格，可以分别通过下面的命令来分别设置：

**风格：`SetLineStyle()`，**<mark style="color:red;">**风格style的重要性体现在如果不先设置风格属性，那么其他属性，如颜色、大小，可能不会生效。**</mark>

<figure><img src="https://1447085975-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fpf9IsLOaNy0SNtz1zmqo%2Fuploads%2FVQc2rde5zIH6CiZSiCEI%2Funnamed.svg?alt=media&#x26;token=2e92ad07-b6bb-4968-b6fb-ff8fea33c0f9" alt=""><figcaption></figcaption></figure>

**颜色：`SetLineColor()`，参考**[**2.5.1**](https://s-klnw.gitbook.io/study-manual/2.3.1-tian-chong-shu-xing#ji-ben-yan-se)

**宽度：`SetLineWidth()`，**<mark style="color:green;">**线宽通常宜设置为 2**</mark>

<figure><img src="https://1447085975-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fpf9IsLOaNy0SNtz1zmqo%2Fuploads%2FReONCF1un6cvn0Qfv4Ln%2Funnamed.svg?alt=media&#x26;token=9624ee0c-f47e-4dad-96cc-abeeab25d622" alt=""><figcaption></figcaption></figure>

<mark style="color:green;">**当然，如果你需要一个带状区域时，也可以简单的使用线宽来调整：**</mark>

```
gr3->SetLineWidth(-802);    // ffll;ff=fill;ll=li
```

## 记号属性

记号的属性设置通常包含颜色、风格、线宽、大小，可以分别通过下面的命令来分别设置：

**风格：`SetMarkerStyle()`**

<figure><img src="https://1447085975-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fpf9IsLOaNy0SNtz1zmqo%2Fuploads%2FgP0CVibFcjZaS4PLDZ3c%2F%E6%88%AA%E5%B1%8F2023-10-24%2016.40.36.png?alt=media&#x26;token=db058ebc-c205-4648-b5a5-4e6372cb7042" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="danger" %}
**注意：**

在绘图时应小心使用非对称符号。 这个图表显示了符号的误导性！这两个绘图代表相同的数据集，但由于符号选择不当，顶部的两个绘图看起来比底部示例相距更远。
{% endhint %}

<figure><img src="https://1447085975-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fpf9IsLOaNy0SNtz1zmqo%2Fuploads%2FAznmTdRXfD3ddiGJtiNL%2F%E6%88%AA%E5%B1%8F2023-10-24%2016.38.19.png?alt=media&#x26;token=95793874-ec1a-40fc-ad72-a0700c1ae340" alt="" width="563"><figcaption></figcaption></figure>

**颜色：`SetMarkerColor()`，**&#x53C2;考[2.5.1](https://s-klnw.gitbook.io/study-manual/2.3.1-tian-chong-shu-xing#ji-ben-yan-se)

**线宽：`SetMarkerStyle()`**

通常情况下，你不需要额外设置记号的线宽，但是当你需要着重标注的时候，可以使用`SetMarkerStyle()`来设置线宽，`50 - 67`线宽为`2`、`68 - 85`线宽为`3`，以此类推：

<figure><img src="https://1447085975-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fpf9IsLOaNy0SNtz1zmqo%2Fuploads%2F6NV0exrWfZWu66lrR7KA%2F%E6%88%AA%E5%B1%8F2023-10-24%2017.04.21.png?alt=media&#x26;token=b55f4ae6-c192-4c11-9652-6068a742b8a2" alt="" width="563"><figcaption></figcaption></figure>

**大小：`SetMarkerSize()`**

下图显示了各种标记尺寸。默认标记大小`=1`显示在左上角。可以指定小于`1`的标记大小。标记大小不指任何坐标系，它是一个绝对值。因此，<mark style="color:green;">**标记大小不受 TPad 比例变化的影响。等于**</mark><mark style="color:green;">**`1`**</mark><mark style="color:green;">**的标记大小对应于 8 像素**</mark>。

<figure><img src="https://1447085975-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fpf9IsLOaNy0SNtz1zmqo%2Fuploads%2Fnj5qAvFgBKtS2GCU4KE1%2F%E6%88%AA%E5%B1%8F2023-10-24%2017.08.46.png?alt=media&#x26;token=e97a6e82-acc1-4a92-85a6-46851b6c30e9" alt="" width="563"><figcaption></figcaption></figure>

## 图例用法

图例可以用来解释图中的各个部分的名称，他的用法是：`TLegend *l = new TLegend(,,,,"")`，意为新建一个名为`l`的图例，参数前四位是相对于画布的归一化坐标，`(0,0)`表示画布的左下角，`(1,1)`表示画布的右上角。

#### 增加图例内容

使用`l->AddEntry(,"")`函数为你的图例添加新的解释：

<details>

<summary> e<strong>.g. 介绍四个高斯函数的图例</strong></summary>

```c
void ex3_gaus(){
    
    TCanvas *c = new TCanvas("c","Four Gaussian Distributions",600,600);
    c->SetGrid();

    TF1 *f1 = new TF1("f1","TMath::Gaus(x,0,1)",-6,6);
    TF1 *f2 = new TF1("f2","TMath::Gaus(x,0,2)",-6,6);
    TF1 *f3 = new TF1("f3","TMath::Gaus(x,1,1)",-6,6);
    TF1 *f4 = new TF1("f4","TMath::Gaus(x,1,2)",-6,6);
    
    TLegend *leg = new TLegend(0.1,0.7,0.4,0.9,"");
    leg->AddEntry(f1,"Gaus(0,1)");
    leg->AddEntry(f2,"Gaus(0,2)");
    leg->AddEntry(f3,"Gaus(1,1)");
    leg->AddEntry(f4,"Gaus(1,2)");

    f1->SetLineColor(2);
    f1->SetLineWidth(4);
    f1->Draw();   

    f2->SetLineColor(4);
    f2->SetLineWidth(4);
    f2->Draw("same");
    
    f3->SetLineColor(6);
    f3->SetLineWidth(4);
    f3->Draw("same");
    
    f4->SetLineColor(8);
    f4->SetLineWidth(4);
    f4->Draw("same");
    
    f1->SetTitle("Four Gaussian Distributions");
    leg->Draw();

    c->SaveAs("ex3_gaus.pdf");
    c->SaveAs("ex3_gaus.svg");

}
```

</details>

<figure><img src="https://1447085975-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fpf9IsLOaNy0SNtz1zmqo%2Fuploads%2FmNZFQjyKxq6NFZM6IuJx%2FfourGaus.svg?alt=media&#x26;token=5283bd54-cb5e-411b-b203-fb98d66df307" alt="" width="425"><figcaption></figcaption></figure>

#### 修改图例框

使用`SetBorderSize(0)`命令**关闭图例框**在某些情况下图像更加美观

<mark style="color:red;">添加阴影</mark>

<mark style="color:red;">修改位置</mark>

**设置多列：**`leg->SetNColumns (2)`

## 画布属性

`gPad->SetMargin(,,,)`四个参数分别表示左边距、右边距、下边距和上边距的大小。

`pad->SetBottomMargin(0.12)`

`pad-> SetTopMargin (0.04)`

`pad->SetRightMargin (0.02)`

## 画板属性

#### 自定义画板位置：

设置画布上的画板位置为倒品字形分布：

```c

   TCanvas *c1 = new TCanvas("c1","Histogram Drawing Options",200,10,700,900);
   TPad *pad1 = new TPad("pad1", "The pad with the function",0.03,0.62,0.50,0.92);
   TPad *pad2 = new TPad("pad2", "The pad with the histogram",0.51,0.62,0.98,0.92);
   TPad *pad3 = new TPad("pad3", "The pad with the histogram",0.03,0.02,0.97,0.57);
   pad1->Draw();
   pad2->Draw();
   pad3->Draw();
```
