diff --git a/Graphics/Dynamic/Plot/R2.hs b/Graphics/Dynamic/Plot/R2.hs
--- a/Graphics/Dynamic/Plot/R2.hs
+++ b/Graphics/Dynamic/Plot/R2.hs
@@ -40,6 +40,7 @@
         , continFnPlot
         , tracePlot
         , lineSegPlot
+        , linregressionPlot
         , PlainGraphicsR2
         , shapePlot
         , diagramPlot
@@ -131,9 +132,10 @@
 import Data.Manifold.PseudoAffine
 import Data.Function.Differentiable
 import Data.Manifold.Types
+import Data.Manifold.Shade
 import Data.Manifold.TreeCover
 import Data.Manifold.Web
-import Data.Manifold.Riemannian (Geodesic)
+import Data.Manifold.Riemannian (Geodesic, pointsBarycenter)
 import qualified Data.Map.Lazy as Map
 
 import qualified Data.Colour.Manifold as CSp
@@ -1235,13 +1237,49 @@
 --   segments.)
 -- 
 --   This function is equivalent to using 'plot' on an 'RWDiffable' arrow.
-fnPlot :: (∀ m . ( WithField ℝ PseudoAffine m
-                 , SimpleSpace (Needle m) )
+fnPlot :: (∀ m . Object (RWDiffable ℝ) m
                          => AgentVal (-->) m ℝ -> AgentVal (-->) m ℝ )
                      -> DynamicPlottable
 fnPlot f = plot fd
  where fd :: ℝ --> ℝ
        fd = alg f
+
+uncertainFnPlot :: ∀ m . (SimpleSpace m, Scalar m ~ ℝ)
+                 => (ℝ -> (m +> ℝ)) -> Shade' m -> DynamicPlottable
+uncertainFnPlot = case linearManifoldWitness :: LinearManifoldWitness m of
+   LinearManifoldWitness BoundarylessWitness -> \mfun (Shade' mBest me)
+      -> plot $ continFnPlot (($ mBest) . mfun)
+            : [ tweakPrerendered (Dia.opacity 0.2)
+               $ continFnPlot (($ mBest^+^σ*^δm) . mfun)
+              | δm <- normSpanningSystem' me
+              , σ <- [-1,1] ]
+
+linregressionPlot :: ∀ x m y . ( SimpleSpace m, Scalar m ~ ℝ, y ~ ℝ, x ~ ℝ )
+                 =>  (x -> (m +> y)) -> [(x, Shade' y)]
+                      -> (Shade' m -> DynamicPlottable -> DynamicPlottable
+                               -> DynamicPlottable)
+                         -> DynamicPlottable
+linregressionPlot = lrp (linearManifoldWitness, dualSpaceWitness)
+ where lrp :: (LinearManifoldWitness m, DualSpaceWitness m)
+                 -> (x -> (m +> y)) -> [(x, Shade' y)]
+                      -> (Shade' m -> DynamicPlottable -> DynamicPlottable
+                              -> DynamicPlottable)
+                        -> DynamicPlottable
+       lrp _ _ [] _ = mempty
+       lrp (LinearManifoldWitness BoundarylessWitness, DualSpaceWitness)
+             mfun dataPts resultHook = resultHook shm
+                        (plot [ plot (Shade (x,y) (sumSubspaceNorms mempty $ dualNorm ey)
+                                        :: Shade (ℝ,ℝ))
+                              | (x, Shade' y ey) <- dataPts ])
+                        (uncertainFnPlot mfun shm)
+        where (mBest, mDevs) = linearRegressionWVar (mfun . (bcx.+~^))
+                                  [ (δx,(fromInterior y,ey))
+                                  | (x,Shade' y ey)<-dataPts
+                                  , let Just δx = x.-~.bcx ]
+              Just bcx = (pointsBarycenter . NE.fromList $ fst<$>dataPts)
+              shm :: Shade' m
+              shm@(Shade' _ em) = dualShade . coverAllAround mBest
+                                    $ convexPolytopeRepresentatives mDevs
 
 -- | Plot a continuous, “parametric function”, i.e. mapping the real line to a path in ℝ².
 paramPlot :: (∀ m . ( WithField ℝ PseudoAffine m, SimpleSpace (Needle m) )
diff --git a/dynamic-plot.cabal b/dynamic-plot.cabal
--- a/dynamic-plot.cabal
+++ b/dynamic-plot.cabal
@@ -1,5 +1,5 @@
 Name:                dynamic-plot
-Version:             0.2.1.0
+Version:             0.2.2.0
 Category:            graphics
 Synopsis:            Interactive diagram windows
 Description:         Haskell excels at handling data like continuous functions
@@ -60,7 +60,7 @@
                      , gtk > 0.10 && < 0.15
                      , glib
                      , colour >= 2 && < 3
-                     , manifolds >= 0.3.1 && < 0.4
+                     , manifolds >= 0.4.1 && < 0.5
                      , manifold-random
                      , colour-space
                      , JuicyPixels > 3 && < 4
