【问题标题】:How to chart graph with many points on small graph如何在小图上绘制带有许多点的图
【发布时间】:2011-05-29 09:58:03
【问题描述】:
我有 100 000 个 x/y 点(高度与距离)要绘制在高度为 400 像素、宽度为 600 像素的图表上。
如何创建一个“估计”曲线,使 100 000 个点看起来像一个图形,而不是很多成束的线?
是否有图表控件可以通过缩放为我做到这一点?
【问题讨论】:
标签:
.net
silverlight
graph
【解决方案1】:
我通过沿 x 轴将数据划分为像素段(在您的情况下为 400)来执行此操作。我会在每组中找到最大值和最小值,并在该 x 点上画一条垂直线。这非常简单,您会对结果感到惊讶。
它仅在绘图区域内的数据点多于 x 坐标时才有效。但无论如何,那是您需要优化的时候。
例如,在 x 偏移 233 内,您有以下数据点。
(1000202, 40)
(1000203, 43)
(1000204, 47)
(1000205, 43)
(1000206, 38)
(1000208, 35)
这将导致从点 (233,35) 到 (233,47) 绘制一条垂直线
【解决方案2】:
我不知道您是否找到了问题的答案,但我开发了一个控件,它对输入数据进行奈奎斯特重采样(因此您只渲染您可以看到的内容)和即时模式渲染(因此您可以获得最佳性能) .结果是,它可以以 30FPS 的速度平滑渲染 100,000 个 xy 点。
Tormod 提出的答案适用于折线图 - 将输入数据分成箱并找到最小值/最大值,然后绘制它们,但是对于其他图表类型,您需要更高级的技术。您将看到的另一个效果是混叠。为了解决这个问题,您可以 a.) 重新采样到更多 bin(例如 2x pixelWidth、4x pixelWidth),b.) 在绘图时使用抗锯齿或 c.) 在下采样之前使用低通过滤数据的重采样算法。这些技术在数字信号处理中很常见,适用于 2D 绘图。