Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallTo visualize millions of data points efficiently, first decide what the viewer must see: every individual record, the shape of the distribution, a computed summary, or only the currently visible part of a map. Use WebGL when individual marks and point-level interaction are essential and the target browser can keep up; rasterization or binning when density or distribution is the message; and viewport-based tiles when a spatial dataset is too large to load all at once. No point-count threshold guarantees a method will be fast—data density, mark size, overdraw, hardware, and interaction all matter.
Start with what the chart must preserve
A chart containing millions of observations does not necessarily need to draw millions of separate shapes. The right approach depends on what a viewer needs to learn or do:
As an Amazon Associate I earn from qualifying purchases.
- Inspect or select individual records: draw individual marks where practical, or provide a separate lookup path for records represented in an aggregate.
- Understand density or distribution: aggregate observations into pixels or bins, then render the resulting image.
- Compare a computed value across regions: choose an aggregation such as a count or mean that matches the question.
- Explore a large geographic dataset: load data for the current map area and zoom level rather than sending the full collection at once.
Aggregation changes what the picture represents. A count, mean, and category summary answer different questions, so choose the reduction before optimizing its speed.
Why drawing every point can become slow
Rendering cost is not determined by record count alone. A dense chart with large marks can require many pixels to be drawn repeatedly, while data transfer and browser memory can constrain an interactive page even before drawing begins. Performance also depends on the chart’s geometry, how points are distributed, the target GPU and browser, and whether users zoom, pan, or filter.
#1 Best Overall
- Wiley
- Language: english
- Book - storytelling with data: a data visualization guide for business professionals
WebGL can make large scatterplots practical, but it is not unlimited. Plotly notes that its WebGL traces are rasterized and that browser documents have limits on available WebGL contexts. Its documentation directs readers with larger datasets toward Datashader. If the output must remain vector, or if users need every mark independently selectable, confirm that the chosen rendering path meets those requirements rather than assuming a fast display preserves them.
Choose a rendering strategy
| Approach | Best fit | Key tradeoff |
|---|---|---|
| WebGL point rendering | Individual marks and point-level interactions, when performance is acceptable on target browsers | Plotly WebGL traces produce rasterized content; browser WebGL contexts are constrained, and performance depends on point size and overdraw. |
| Rasterization or binning | Dense scatterplots where density, distribution, or aggregate values matter more than a separate glyph for each row | The reduction determines what viewers see. Counts, means, and categories communicate different information; individual rows are not inherently available from the rendered image. |
| GPU aggregation | Large, sufficiently dense inputs where GPU processing and memory are worthwhile | Setup overhead can make GPU aggregation slower on small inputs. Sparse data may use GPU memory inefficiently, and precision and retrieval of individual points within a bin can be limiting. |
| Viewport-based tiles | Large spatial datasets explored through map zoom and pan | Data must be organized into tiles with geographic bounds and levels of detail; only tiles relevant to the current viewport are loaded. |
| Server-side or dynamically rasterized plots | Datasets too large to send raw to the browser, while retaining interactive zoom and pan | The underlying data must be accessible to the processing path, which generates updated raster results as the view changes. |
Use aggregation when the distribution matters more than each glyph
Datashader maps records into a regular grid and converts the aggregate into an image. Its documented pipeline separates aggregation over the dataset from later stages that operate on a fixed-size representation. That means the displayed representation can stay bounded by the image dimensions even when the input collection is much larger.
The Datashader project documentation describes the result this way: “Datashader turns even the largest datasets into images, faithfully preserving the data’s distribution.” That is a statement about the approach, not a promise that every aggregation preserves every property of the original records. Choose the aggregate—such as counts, means, or categories—to match the question, and retain an alternate way to inspect source records if users need them.
For a chart that must respond to zooming or panning, HoloViews integrations with Bokeh or Plotly can request updated Datashader results as the view changes. The data must be available to the processing path that creates those results.
Use GPU aggregation only when its workload fits
GPU aggregation can accelerate large inputs, but it has setup costs and memory tradeoffs. In deck.gl’s documented comparison, a 2016 15-inch MacBook Pro with a 2.8 GHz Intel Core i7 and AMD Radeon R9 M370X 2 GB produced these results:
| Objects in the test | CPU | GPU |
|---|---|---|
| 25K | 535 iterations/sec | 359 iterations/sec |
| 100K | 119 iterations/sec | 437 iterations/sec |
| 1M | 12.7 iterations/sec | 158 iterations/sec |
These are results from that specific documented comparison, not a general guarantee or a head-to-head test of every library. The CPU led at 25K objects, while the GPU led at the larger tested sizes—an illustration of why setup overhead and input size matter. deck.gl also identifies sparse inputs, memory efficiency, precision, and point inspection within bins as considerations.
Load map data by visible area
For spatial data, sending every feature to the browser can be unnecessary when the user sees only one region at one zoom level. deck.gl’s TileLayer loads tiles that intersect the current viewport; tiles are associated with bounds and levels of detail. This lets the application fetch and render the part of the collection relevant to the current view instead of loading the entire dataset for each map view.
Recommended Free Tools
Tile-based loading is most useful when the data is spatial and can be organized into a suitable tile scheme. It is not a substitute for choosing the right aggregation or rendering method within each tile.
Best Value
Benchmark the interaction, not just the point count
Benchmark with representative data, the actual chart settings, and the devices and browsers your audience uses. A useful test includes the operations viewers will perform, not just an initial draw.
- Use the real distribution and data density; uniform test data can behave differently from clustered data.
- Test the intended point size and opacity, since larger marks can increase overdraw.
- Include zoom, pan, filtering, and selection if those interactions are part of the product.
- Measure data transfer, memory use, aggregation time, and redraw responsiveness separately where possible.
- Check whether the output must be vector, whether individual points must remain selectable, and whether processing runs in the browser or on a server.
- Record the hardware, browser, data size, chart settings, and interaction conditions alongside any performance claim.
Published examples illustrate why conditions matter. Datashader’s v0.19.1 documentation says it can plot a billion points in about a second on a 16 GB laptop; this is the project’s stated capability, not an independently reproduced benchmark here. deck.gl’s performance documentation cites up to about 1M items at 60 FPS on 2015 MacBook Pros and 10–20 FPS near 10M items. Those are older examples from different documentation and workloads, not a comparable ranking or a forecast for current hardware.
Quick Recap
A practical decision path
- Need to see or select separate records? Try individual WebGL marks, then test on target browsers for rendering performance and context availability.
- Need density, distribution, or an aggregate? Rasterize or bin the data, selecting a reduction that answers the question.
- Is the dataset spatial and larger than a useful single view? Organize it into bounded tiles and load the tiles for the current viewport and zoom level.
- Is the input large and dense enough to justify GPU work? Compare GPU and CPU aggregation on representative data, including memory use and whether users need point-level inspection.
- Does the raw dataset exceed what should be sent to a browser? Consider dynamically generated raster results, provided the processing service can access the underlying data.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.




