Main Content


Create a horizontal bar chart for category weights

Since R2023a



categoryWeightsChart(BrinsonPAObj) creates a horizontal bar chart of portfolio, benchmark, and active weights by category, averaged over all time periods using a brinsonAttribution object.


h = categoryWeightsChart(ax,BrinsonPAObj) additionally returns the figure handle h.


h = categoryWeightsChart(___,Name=Value) adds optional name-value arguments.


collapse all

This example shows how to create a brinsonAttribution object that you can then use with the categoryWeightsChart function to generate a bar chart of category weights.

Prepare Data

Create a table for the monthly prices for four assets.

GM =[17.82;22.68;19.37;20.28];
HD = [39.79;39.12;40.67;40.96];
KO = [38.98;39.44;40.00;40.20];
PG = [56.38;57.08;57.76;55.54];
MonthlyPrices  = table(GM,HD,KO,PG);

Use tick2ret to define the monthly returns.

MonthlyReturns = tick2ret(MonthlyPrices.Variables)';
  [NumAssets,NumPeriods] = size(MonthlyReturns); 

Define the periods.

Period = ones(NumAssets*NumPeriods,1);
  for k = 1:NumPeriods
      Period(k*NumAssets+1:end,1) = Period(k*NumAssets,1) + 1;

Define the categories (sectors) for the four assets.

Name = repmat(string(MonthlyPrices.Properties.VariableNames(:)),NumPeriods,1);
  Categories = repmat(categorical([ ...
      "Consumer Discretionary"; ...
      "Consumer Discretionary"; ...
      "Consumer Staples"; ...
      "Consumer Staples"]),NumPeriods,1);

Define benchmark and portfolio weights.

BenchmarkWeight = repmat(1./NumAssets.*ones(NumAssets, 1),NumPeriods,1);
PortfolioWeight = repmat([1;0;1;1]./3,NumPeriods,1);

Create AssetTable Input

Create AssetTable as the input for the brinsonAttribution object.

AssetTable = table(Period, Name, ...
    MonthlyReturns(:), Categories, PortfolioWeight, BenchmarkWeight, ...
AssetTable=12×6 table
    Period    Name     Return             Category           PortfolioWeight    BenchmarkWeight
    ______    ____    _________    ______________________    _______________    _______________

      1       "GM"      0.27273    Consumer Discretionary        0.33333             0.25      
      1       "HD"    -0.016838    Consumer Discretionary              0             0.25      
      1       "KO"     0.011801    Consumer Staples              0.33333             0.25      
      1       "PG"     0.012416    Consumer Staples              0.33333             0.25      
      2       "GM"     -0.14594    Consumer Discretionary        0.33333             0.25      
      2       "HD"     0.039622    Consumer Discretionary              0             0.25      
      2       "KO"     0.014199    Consumer Staples              0.33333             0.25      
      2       "PG"     0.011913    Consumer Staples              0.33333             0.25      
      3       "GM"      0.04698    Consumer Discretionary        0.33333             0.25      
      3       "HD"    0.0071306    Consumer Discretionary              0             0.25      
      3       "KO"        0.005    Consumer Staples              0.33333             0.25      
      3       "PG"    -0.038435    Consumer Staples              0.33333             0.25      

Create brinsonAttribution Object

Use brinsonAttribution to create the brinsonAttribution object.

BrinsonPAobj = brinsonAttribution(AssetTable)
BrinsonPAobj = 
  brinsonAttribution with properties:

                  NumAssets: 4
         NumPortfolioAssets: 3
         NumBenchmarkAssets: 4
                 NumPeriods: 3
              NumCategories: 2
                  AssetName: [4x1 string]
                AssetReturn: [4x3 double]
              AssetCategory: [4x3 categorical]
       PortfolioAssetWeight: [4x3 double]
       BenchmarkAssetWeight: [4x3 double]
    PortfolioCategoryReturn: [2x3 double]
    BenchmarkCategoryReturn: [2x3 double]
    PortfolioCategoryWeight: [2x3 double]
    BenchmarkCategoryWeight: [2x3 double]
            PortfolioReturn: 0.0598
            BenchmarkReturn: 0.0540
               ActiveReturn: 0.0059

Generate Horizontal Bar Chart for Category Weights

Use the brinsonAttribution object with categoryWeightsChart to generate a horizontal bar chart of portfolio, benchmark, and active weights by category, averaged over all time periods.


Alternatively, you can use the name-value argument for ActiveOnly to plot only active weights by category.


Input Arguments

collapse all

brinsonAttribution object to analyze performance attribution. Use brinsonAttribution to create the brinsonAttribution object.

Data Types: object

(Optional) Valid axis object, specified as an ax object that you create using axes. categoryWeightsChart creates the plot on the axes specified by the optional ax argument instead of on the current axes (gca). The optional argument ax can precede any of the input argument combinations. If you do not specify an axes, categoryWeightsChart plots into the current axes.

Data Types: object

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Example: categoryWeightsChart(BrinsonPAObj,ActiveOnly=true)

Indicator to plot only active weights by category, specified as ActiveOnly and a logical with a value of true (plot active weights only) or false (plot portfolio, benchmark, and active weights).

Data Types: logical

Output Arguments

collapse all

Figure handle for weights by category chart, returned as handle object. You can use the figure handle to access and change the properties of the chart.

Version History

Introduced in R2023a