Text and Annotations in MATLAB®

How to make Text and Annotations plots in MATLAB® with Plotly.


Plotly is known for its graphing libraries, but it's also a broader ecosystem for building interactive data apps, AI data analysis tools, and deploying and hosting Dash apps. Explore the full set of tools and platforms designed to help turn data into action. Discover Plotly.

Note: We are retiring documentation for R, MATLAB, Julia, and F#. Learn more about this change here.

Adding Text to Plots with the text Function

x = -pi:pi/10:pi;
y = sin(x);
figure('Name', 'Sample graph'), plot(x, y, '--rs');

for i=8:size(x,2)-8
text(x(i), y(i), 'Text');
end

fig2plotly(gcf);

Similarly, here is an example for line and a scatter plot:

trace1 = struct(...
  'x', [0, 1, 2], ...
  'y', [1, 1, 1], ...
  'mode', 'lines+markers+text', ...
  'name', 'Lines, Markers and Text', ...
  'text', { {'Text A', 'Text B', 'Text C'} }, ...
  'textposition', 'top', ...
  'type', 'scatter');

trace2 = struct(...
  'x', [0, 1, 2], ...
  'y', [2, 2, 2], ...
  'mode', 'markers+text', ...
  'name', 'Markers and Text', ...
  'text', { {'Text D', 'Text E', 'Text F'} }, ...
  'textposition', 'bottom', ...
  'type', 'scatter');

trace3 = struct(...
  'x', [0, 1, 2], ...
  'y', [3, 3, 3], ...
  'mode', 'lines+text', ...
  'name', 'Lines and Text', ...
  'text', { {'Text G', 'Text H', 'Text I'} }, ...
  'textposition', 'bottom', ...
  'type', 'scatter');

data = {trace1, trace2, trace3};

layout = struct('showlegend', false);

plotly(data, struct('layout', layout));
x = 1:10; y = 1:10; 
fig = figure;
hold on
scatter(x,y);
a = [1:10]'; b = num2str(a); c = cellstr(b);
dx = 0.1; dy = 0.1; % displacement so the text does not overlay the data points
text(x+dx, y+dy, c);

plot([1 1],[2 3])
text(1.2,2.2,'A Line');
xlim([-1 5])
ylim([-1 5])
hold off

fig2plotly(fig);

Enable Hover

x = 1:10:100;
fig = figure;
plot(x, (x+1).^2, 'bo','markers',14)
title('hover over the markers to see the coordinates');
response = fig2plotly(fig, 'strip',false);

data = cell2struct(data,'data',1);
data.mode = 'markers+text'; 

plotly(data, response.layout);
"To be inmplemented soon"

Similarly, here is an example for line and a scatter plot:

data = {...
  struct(...
    'x', [0, 1, 2], ...
    'y', [1, 3, 2], ...
    'mode', 'markers', ...
    'text', { {'Text A', 'Text B', 'Text C'} }, ...
    'type', 'scatter')...
};

layout = struct('title', 'Hover over the points to see the text');

plotly(data, struct('layout', layout));

Styling and Coloring Annotations

trace1 = struct(...
  'x', [0, 1, 2, 3, 4, 5, 6, 7, 8], ...
  'y', [0, 1, 3, 2, 4, 3, 4, 6, 5], ...
  'type', 'scatter');

trace2 = struct(...
  'x', [0, 1, 2, 3, 4, 5, 6, 7, 8], ...
  'y', [0, 4, 5, 1, 2, 2, 3, 4, 2], ...
  'type', 'scatter');

data = {trace1, trace2};

layout = struct(...
    'showlegend', false, ...
    'annotations', { {...
      struct(...
        'x', 2, ...
        'y', 5, ...
        'xref', 'x', ...
        'yref', 'y', ...
        'text', 'max=5', ...
        'showarrow', true, ...
        'font', struct(...
          'family', 'Courier New, monospace', ...
          'size', 16, ...
          'color', '#ffffff'), ...
        'align', 'center', ...
        'arrowhead', 2, ...
        'arrowsize', 1, ...
        'arrowwidth', 2, ...
        'arrowcolor', '#636363', ...
        'ax', 20, ...
        'ay', -30, ...
        'bordercolor', '#c7c7c7', ...
        'borderwidth', 2, ...
        'borderpad', 4, ...
        'bgcolor', '#ff7f0e', ...
        'opacity', 0.8)...
    } });

plotly(data, struct('layout', layout));

Here is an example with custom text size, plot and text color:

trace1 = struct(...
  'x', [0, 1, 2], ...
  'y', [1, 1, 1], ...
  'mode', 'lines+markers+text', ...
  'name', 'Lines, Markers and Text', ...
  'text', { {'Text A', 'Text B', 'Text C'} }, ...
  'textposition', 'top right', ...
  'textfont', struct(...
    'family', 'sans serif', ...
    'size', 18, ...
    'color', '#1f77b4'), ...
  'type', 'scatter');

trace2 = struct(...
  'x', [0, 1, 2], ...
  'y', [2, 2, 2], ...
  'mode', 'lines+markers+text', ...
  'name', 'Lines and Text', ...
  'text', { {'Text G', 'Text H', 'Text I'} }, ...
  'textposition', 'bottom', ...
  'textfont', struct(...
    'family', 'sans serif', ...
    'size', 18, ...
    'color', '#ff7f0e'), ...
  'type', 'scatter');

data = {trace1, trace2};

layout = struct('showlegend', false);

plotly(data, struct('layout', layout));

Single Annotation

trace1 = struct(...
  'x', [0, 1, 2, 3, 4, 5, 6, 7, 8], ...
  'y', [0, 1, 3, 2, 4, 3, 4, 6, 5], ...
  'type', 'scatter');

trace2 = struct(...
  'x', [0, 1, 2, 3, 4, 5, 6, 7, 8], ...
  'y', [0, 4, 5, 1, 2, 2, 3, 4, 2], ...
  'type', 'scatter');

data = {trace1, trace2};

layout = struct(...
    'showlegend', false, ...
    'annotations', { {...
      struct(...
        'x', 2, ...
        'y', 5, ...
        'xref', 'x', ...
        'yref', 'y', ...
        'text', 'Annotation Text', ...
        'showarrow', true, ...
        'arrowhead', 7, ...
        'ax', 0, ...
        'ay', -40)...
    } });

plotly(data, struct('layout', layout));

Multiple Annotations

trace1 = struct(...
  'x', [0, 1, 2, 3, 4, 5, 6, 7, 8], ...
  'y', [0, 1, 3, 2, 4, 3, 4, 6, 5], ...
  'type', 'scatter');

trace2 = struct(...
  'x', [0, 1, 2, 3, 4, 5, 6, 7, 8], ...
  'y', [0, 4, 5, 1, 2, 2, 3, 4, 2], ...
  'type', 'scatter');

data = {trace1, trace2};

layout = struct(...
    'showlegend', false, ...
    'annotations', { {...
      struct(...
        'x', 2, ...
        'y', 5, ...
        'xref', 'x', ...
        'yref', 'y', ...
        'text', 'Annotation Text', ...
        'showarrow', true, ...
        'arrowhead', 7, ...
        'ax', 0, ...
        'ay', -40), ...
      struct(...
        'x', 4, ...
        'y', 4, ...
        'xref', 'x', ...
        'yref', 'y', ...
        'text', 'Annotation Text 2', ...
        'showarrow', true, ...
        'arrowhead', 7, ...
        'ax', 0, ...
        'ay', -40)...
    } });

plotly(data, struct('layout', layout));