Annotated Heatmaps in MATLAB®

How to make Annotated Heatmap plots in MATLAB® with Plotly.


Create Heatmap from Tabular Data

Create a heatmap from a table of data for medical patients.

Load the patients data set and create a table from a subset of the variables loaded into the workspace. Then create a heatmap that counts the total number of patients with the same set of Smoker and SelfAssessedHealthStatus values.

load patients
tbl = table(LastName,Age,Gender,SelfAssessedHealthStatus,...
    Smoker,Weight,Location);
h = heatmap(tbl,'Smoker','SelfAssessedHealthStatus');

fig2plotly(gcf);

Reorder Heatmap Labels

Create a heatmap and reorder the labels along the y-axis.

Load the patients data set and create a heatmap from the data. Assign the HeatmapChart object to the variable h.

load patients
tbl = table(LastName,Age,Gender,SelfAssessedHealthStatus,...
    Smoker,Weight,Location);
h = heatmap(tbl,'Smoker','SelfAssessedHealthStatus');

fig2plotly(gcf);

Reorder the labels along the y-axis.

load patients
tbl = table(LastName,Age,Gender,SelfAssessedHealthStatus,...
    Smoker,Weight,Location);
h = heatmap(tbl,'Smoker','SelfAssessedHealthStatus');

h.YDisplayData = {'Excellent','Good','Fair','Poor'};

fig2plotly(gcf);

Alternatively, you can reorder the labels by changing the data to categorical data and then reordering the categories using the reordercats function. Similarly, you can add, remove, or rename the heatmap labels using the addcats, removecats, or renamecats functions, respectively.

Specify Table Variable for Heatmap Colors

Create a heatmap and specify the table variable to use when determining the heatmap cell colors.

Load the patients data set and create a heatmap from the data. Color each cell using the average age of patients with a particular pair of Smoker and SelfAssessedHealthStatus values by setting the ColorVariable option to 'Age'.

load patients
tbl = table(LastName,Age,Gender,SelfAssessedHealthStatus,...
    Smoker,Weight,Location);
h = heatmap(tbl,'Smoker','SelfAssessedHealthStatus','ColorVariable','Age');

fig2plotly(gcf);

Specify Calculation Method for Color Data

Create a heatmap and specify the table variable and calculation method to use when determining the heatmap cell colors.

Load the patients data set and create a heatmap from the data. Color each cell using the median age of patients with a particular pair of Smoker and SelfAssessedHealthStatus values. Specify the ColorVariable option as 'Age' and the ColorMethod option as 'median'.

load patients
tbl = table(LastName,Age,Gender,SelfAssessedHealthStatus,...
    Smoker,Weight,Location);
h = heatmap(tbl,'Smoker','SelfAssessedHealthStatus','ColorVariable','Age','ColorMethod','median');

fig2plotly(gcf);

Create Heatmap from Matrix Data

Create a matrix of data. Then create a heatmap of the matrix values. The default labels along the x-axis and y-axis appear as 1, 2, 3, and so on.

cdata = [45 60 32; 43 54 76; 32 94 68; 23 95 58];
h = heatmap(cdata);

fig2plotly(gcf);

Create Heatmap from Matrix Data Using Custom Axis Labels

Create a matrix of data. Then create a heatmap of the matrix values. Use custom labels along the x-axis and y-axis by specifying the first two input arguments as the labels you want. Specify the title and axis labels by setting properties of the HeatmapChart object.

cdata = [45 60 32; 43 54 76; 32 94 68; 23 95 58];
xvalues = {'Small','Medium','Large'};
yvalues = {'Green','Red','Blue','Gray'};
h = heatmap(xvalues,yvalues,cdata);

h.Title = 'T-Shirt Orders';
h.XLabel = 'Sizes';
h.YLabel = 'Colors';

fig2plotly(gcf);

Normalize Colors Along Each Row or Column

Create a heatmap and normalize the colors along each column or row by setting the ColorScaling property.

Read the sample file outages.csv into a table. The sample file contains data representing electric utility outages in the Unites States. The table contains six columns: Region, OutageTime, Loss, Customers, RestorationTime, and Cause. Display the first five rows of each column.

T = readtable('outages.csv');
T(1:5,:)
ans =

  5x6 table

       Region           OutageTime        Loss     Customers     RestorationTime            Cause       
    _____________    ________________    ______    __________    ________________    ___________________

    {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'   }
    {'SouthEast'}    2003-01-23 00:49    530.14    2.1204e+05                 NaT    {'winter storm'   }
    {'SouthEast'}    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'   }
    {'West'     }    2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    {'equipment fault'}
    {'MidWest'  }    2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'   }

Create a heatmap that shows the different regions along the x-axis and the different outage causes along the y-axis. In each cell, show how many times each region experienced a power outage due to a particular cause.

T = readtable('outages.csv');

h = heatmap(T,'Region','Cause');

fig2plotly(gcf);

Normalize the colors along each column. The smallest value in each column maps to the first color in the colormap and the largest value maps to the last color. The last color indicates the cause that caused the most power outages for each region.

T = readtable('outages.csv');

h = heatmap(T,'Region','Cause');

h.ColorScaling = 'scaledcolumns';

fig2plotly(gcf);

Normalize the colors along each row instead. The smallest value in each row maps to the first color in the colormap and the largest value maps to the last color. The last color indicates the region that experienced the most power outages due to each cause.

T = readtable('outages.csv');

h = heatmap(T,'Region','Cause');

h.ColorScaling = 'scaledrows';

fig2plotly(gcf);

Compute Color Data Using Custom Aggregation Method

Create a heatmap and color the cells using data computed with a custom aggregation method. Use the accumarray function to compute the color data.

Read the sample file Temperature.csv into a table. The file contains three columns: Month, Year, and TemperatureF.

tbl = readtable('TemperatureData.csv');
...ERROR...
Unable to find or open 'TemperatureData.csv'. Check the path and filename or file permissions.

Create categorical arrays from the Month and Year columns of the table. Then determine the unique months and years to use as labels along the x-axis and y-axis.

tbl = readtable('TemperatureData.csv');

months = categorical(tbl.Month);
years = categorical(tbl.Year);
xlabels = categories(months);
ylabels = categories(years);
...ERROR...
Unable to find or open 'TemperatureData.csv'. Check the path and filename or file permissions.

Determine the final size of the resulting color data based on the number of unique months and years.

tbl = readtable('TemperatureData.csv');

months = categorical(tbl.Month);
years = categorical(tbl.Year);
xlabels = categories(months);
ylabels = categories(years);

nummonths = numel(xlabels);
numyears = numel(ylabels);
...ERROR...
Unable to find or open 'TemperatureData.csv'. Check the path and filename or file permissions.

Convert the categorical months and years arrays into numeric indices to use with the accumarray function. Compute the color data as the maximum temperature for each month and year combination using the accumarray function. Use NaN for missing month and year combinations.

tbl = readtable('TemperatureData.csv');

months = categorical(tbl.Month);
years = categorical(tbl.Year);
xlabels = categories(months);
ylabels = categories(years);

nummonths = numel(xlabels);
numyears = numel(ylabels);

x = double(months);
y = double(years);
temps = tbl.TemperatureF;
cdata = accumarray([y,x],temps,[numyears,nummonths],@max,NaN);
...ERROR...
Unable to find or open 'TemperatureData.csv'. Check the path and filename or file permissions.

Create the heatmap. Label the x-axis and y-axis with the months and years, respectively. Color the heatmap cells using the computed matrix data.

tbl = readtable('TemperatureData.csv');

months = categorical(tbl.Month);
years = categorical(tbl.Year);
xlabels = categories(months);
ylabels = categories(years);

nummonths = numel(xlabels);
numyears = numel(ylabels);

x = double(months);
y = double(years);
temps = tbl.TemperatureF;
cdata = accumarray([y,x],temps,[numyears,nummonths],@max,NaN);

h = heatmap(xlabels,ylabels,cdata);

fig2plotly(gcf);
"To be inmplemented soon"

Note: You can use the reordercats function for categorical arrays to reorder the axis labels.