Skip to main content

Matrix

A survey question type presenting multiple statements as rows with a shared set of radio button response options across columns. Use in engagement surveys where participants rate several related statements using the same scale.

Figma Storybook Docs

Description

What it does

Presents a grid of radio buttons where each row is a distinct statement and each column is a shared response option, allowing participants to rate multiple related items using one consistent scale.

Where it appears

Survey builder and published survey pages in both Open Point and Social Point. Appears within consultation questionnaires, community feedback forms, and stakeholder satisfaction surveys.

Why it exists

Government engagement surveys frequently ask participants to rate several related statements on the same scale (e.g. Likert). Repeating individual radio groups for each statement wastes space and creates visual noise. The matrix consolidates these into a scannable, compact grid that reduces cognitive load and survey fatigue.

Dependencies

Radio, Form Control, Label

Anatomy

PartRequired?Notes
Group label Required The overarching question or instruction that applies to all rows. Rendered as a legend or heading above the table. Example: 'Please rate your agreement with the following statements about this consultation process.'
Column headers Required The shared response scale options (e.g. Strongly disagree, Disagree, Neutral, Agree, Strongly agree). Displayed as column headers above the radio inputs.
Row label Required The individual statement or sub-question for each row. Left-aligned. Should be concise — one sentence maximum.
Radio input cell Required A single radio button within the grid cell. Each cell corresponds to the intersection of a row statement and a column response option. Only one cell per row may be selected.
Row divider Recommended A subtle horizontal rule between rows to aid scanability, especially in longer matrices.
Required indicator Optional An asterisk or 'Required' label appended to the group label when all rows must be answered before submission.
Error message Optional Inline validation message shown beneath an unanswered row when the field is required. Uses --op-color-status-error.
Helper text Optional Secondary instruction below the group label. Use to clarify the scale (e.g. '1 = Not at all satisfied, 5 = Extremely satisfied') or to set expectations about how many rows must be answered.

Variants

Likert scale (5-point)

Standard five-option agreement scale (Strongly disagree to Strongly agree)

Measuring participant agreement or satisfaction across a set of related statements. Most common in consultation and stakeholder surveys.

Frequency scale

Options describe how often something occurs (Never, Rarely, Sometimes, Often, Always)

Assessing how frequently stakeholders or community members experience something, such as barriers to participation or service quality.

Quality scale

Options describe perceived quality (Very poor, Poor, Fair, Good, Excellent)

Rating the quality of consultation elements, such as information provided, accessibility of materials, or responsiveness of the agency.

Binary (Yes / No)

Two-option scale for straightforward factual or opinion checks

Use sparingly. Appropriate when nuance is genuinely unnecessary and the survey is short. Avoid when participant views are likely to be mixed.

Scrollable (mobile)

Horizontal scroll applied to the column header row and radio cells on narrow viewports

Automatically applied when the matrix exceeds the available viewport width. Always pair with visible scroll affordance (shadow or fade on the right edge).

States

State Behaviour
Default All rows unselected. Column headers and row labels are visible. No validation state applied.
Selected The chosen radio cell shows a filled radio indicator using --op-color-interactive-default. The row may receive a subtle background highlight to confirm selection.
Focused The focused radio input receives a 3px focus ring in --op-color-interactive-focus. Focus moves cell by cell across columns with Arrow keys, and row by row with Tab.
Error (row-level) A required row that has not been answered after attempted submission shows an error border (--op-color-status-error) on the row label and an inline error message below. Other completed rows are unaffected.
Disabled (row) An individual row is grayed out and inputs are non-interactive. Used when a row is conditionally inapplicable. Row label uses --op-color-text-disabled.
Disabled (full matrix) All inputs are non-interactive. Used in read-only summary views or submitted survey confirmation pages.
Loading / skeleton A skeleton placeholder grid replaces the matrix while survey content loads. Row and column counts match the expected matrix dimensions to prevent layout shift.

Usage guidelines

When to use

  • You have three or more related statements that all use the same response scale.
  • Survey length and participant time are a concern and consolidation aids completion rates.
  • The response scale has four to seven options — enough to warrant a shared header row.
  • The statements are genuinely parallel in structure so the same scale applies meaningfully to each.

When not to use

  • You have only one or two statements — use individual radio groups instead to avoid the overhead of a full table.
  • Each statement requires a different scale — the matrix assumes a single shared scale across all rows.
  • The survey is delivered on a platform where table rendering is unreliable or screen reader support is poor — use stacked radio groups as a fallback.
  • Statements are long, multi-sentence items — the row label column becomes too wide and the layout breaks at smaller viewports.
  • You need to allow multiple selections per row — use a checkbox matrix or a separate component.

Do / Don't

Do

Keep row labels to one concise sentence so they fit the constrained row label column without wrapping excessively.

Don't

Do not write paragraph-length row labels. Truncation or extreme wrapping destroys the grid alignment and makes the matrix harder to scan.

Do

Label column headers with the full text of each scale option, even if abbreviated on small screens.

Don't

Do not use numbers alone (1, 2, 3) as column headers without a visible scale legend — participants cannot infer meaning, which invalidates survey data.

Do

Provide a 'Not applicable' or 'No opinion' option in the column headers when participants may genuinely have no basis to respond.

Don't

Do not force a response on rows that may not apply to all participants — this introduces noise into survey results and frustrates respondents.

Do

Test the matrix at 320px viewport width and verify the horizontal scroll affordance is visible.

Don't

Do not assume the matrix will reflow gracefully on mobile without explicit responsive handling — default table layout clips silently.

Do

Group related matrices together under a section heading so participants understand the thematic context.

Don't

Do not mix matrices with very different scales on the same screen without clear visual separation — participants may carry over the scale from the previous matrix.