Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Tradeoff Scatter Pricing Block for React

Video hosting plans plotted as bubbles by monthly price and cost per hour of viewing, sized by storage: each bubble is a radio button, and the cell beside the chart shows the chosen plan.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Show the price-to-value tradeoff at a glance with this tradeoff scatter pricing section, shown here for Reelhouse, a video host. A chart plots four plans by monthly price along the bottom, on a log scale from $10 to $900, and by what 1,000 viewing hours cost up the side, each as a bubble sized by its storage, with the recommended plan circled. The bubbles fall from the top left to the bottom right, which is the argument: spend more and every hour of viewing gets cheaper. The chart sits in the left cell of one ruled band, and the bubbles are a Segment Group: tap one, or Tab into the chart and use the arrow keys, and the selected bubble fills in while the right cell switches to that plan's name, tagline, price, cost per 1,000 hours, features and Shine Button, its price rolling with Sliding Number. The chart is plain HTML and CSS, so its labels stay a readable size on a phone, and the bubbles are greys, so the theme's colour marks one action: the call to action. The section sits on the page's drafting lines, drawn by Guides: rails that continue into the blocks above and below, a rule along the top with a + on each crossing, and + marks on the band's corners. Built with Badge, Guides, Segment Group, Sliding Number, Shine Button and Lucide icons, with CSS transitions only. For developer tools, media and infrastructure products and any pricing page where volume discounts are the argument.

FAQ

How do I change the plans and where their bubbles sit?

Edit PLANS at the top of the file. A plan's price sets its place along the price axis, and its height comes from the cost per 1,000 viewing hours, worked out as price / (hours / 1000), so change hours and the bubble moves. size is the bubble's width in pixels for its storage, label puts its name beside the bubble ("end") or above it ("above"), and from marks a plan whose price is a starting point, like Enterprise. The rest is the right cell's content: name, tagline, features, cta, href and popular, which draws the ring and the Most popular badge.

Do the axes scale to my prices?

No, they're fixed so the chart doesn't jump between plans: X_MIN and X_MAX set the price range (logarithmic, so $15 and $400 both have room), Y_MAX the top of the cost axis, and X_TICKS and Y_TICKS the gridlines and their labels. If your prices run higher or your cost per unit is not between $0 and $9, change them, and keep every bubble inside the range. In right-to-left layouts the chart mirrors: price grows towards the left and the cost axis moves to the right.

How do keyboard and screen reader users pick a plan?

The bubbles are a radio group named "Plan": Tab reaches the selected bubble, which shows a focus ring, and the arrow keys move to the next plan and select it. Each bubble is read with its name, price, cost per 1,000 hours and storage, as in "Pro, $45 per month, $4.50 per 1,000 viewing hours, 1 TB of storage". The gridlines, tick labels and axis titles are hidden from screen readers, since every bubble already says its own numbers. Selecting a plan doesn't announce the cell's new content; the selected radio already says which plan it is.

How do I connect the call to action?

The cell's button is a real link to the selected plan's href. It's a ShineButton with render set to an a element and nativeButton={false}. Point the paid plans at your trial or checkout route with the plan in the URL, and Enterprise's Talk to sales at your sales form.

How does the chart work on a phone?

The chart is HTML positioned by percentages, not a scaled image, so its text keeps its size: the tick labels, axis titles and bubble names stay at 12 pixels while the plot narrows. The bubbles shrink to 70% of their size below the sm breakpoint, and each bubble's name and price count as part of it, so the smallest plan is easy to tap. The plan cell stacks under the chart, with the price and button first and the features after.

When should I use a scatter chart instead of a comparison table?

Use the scatter when the tradeoff between price and what you get is the main argument, and you want visitors to see that bigger plans cost less per unit. It works for three to five plans; more crowd the chart. When buyers need to check many individual features across plans, a comparison table such as Tiered API Pricing serves them better.

  • Pro

    Four backup plans drawn as columns of a storage chart, to scale: choosing a column shows its plan's price, price per terabyte, features and call to action beside the chart.

  • Pro

    Radar Chart Pricing

    Charts and figures

    Three database plans, each led by a radar chart of six capability scores that shows the plan's shape at a glance, over its price, call to action and real limits. A snap carousel on phones.

  • Pro

    A needs checklist for picking a plan: tick what you need and the cheapest plan that covers every need lights up with its price, while each need says which plan it starts at.

  • Pro

    A total-cost-of-ownership projection for a data lake: a one, three or five year switch redraws a line chart of each option's cumulative cost, beside the two plans you can buy with their totals and buttons.

  • Pro

    Graduated per-user pricing, explained: type a number of monthly active users and four stacked tier bands fill from the left, each showing its users times its rate, summed into the monthly bill.

  • Pro

    Per-seat pricing that falls across four team-size brackets, drawn as a descending bar chart beside compact rows with the saving on each bracket and a call to action per row.