If you want to draw those disks and circles *automatically*, a convenient way would be post-processing a styled plot. First we generate a unique mark for the `ExclusionsStyle` and `ClippingStyle`: excluColor = RGBColor @@ RandomReal[1, 3]; clipColor = RGBColor @@ RandomReal[1, 3] Use them to style the exclusions: origplot = Plot[Floor[Tan[x]], {x, 0, π}, PlotStyle -> Directive[Thick], Exclusions -> {Automatic, Cos[x] == 0}, ExclusionsStyle -> {excluColor, excluColor}] ![original exclusion plot][2] and the clipped intervals (we need this because the `ExclusionsStyle` seems to have a higher priority than `ClippingStyle`, and we don't want to mistake the clipped intervals for the discontinuous intervals): clipplot = Plot[Floor[Tan[x]], {x, 0, π}, Exclusions -> {Automatic, Cos[x] == 0}, ExclusionsStyle -> None, ClippingStyle -> clipColor] clipIntv = Interval @@ Cases[clipplot, {___, clipColor, lines : (Line[_] ..)} :> Through[{Min, Max}@Flatten[#[[All, 1]] & @@@ {lines}]], ∞]; To draw the circles correctly, we need to know the aspect-ratio and set a appropriate radius: radius = 0.02; {rgx, rgy} = PlotRange.{-1, 1} /. AbsoluteOptions[origplot, PlotRange]; asprat = AspectRatio /. AbsoluteOptions[origplot, AspectRatio]; The remaining work is some replacements: origplot /. {excluColor, lines : (Line[_] ..)} :> Flatten[{Black, Module[{x = Mean[#[[All, 1]]]}, If[IntervalMemberQ[clipIntv, x], {}, Disk[{x, 0}, radius {1, 1/asprat rgy/rgx}] ] ] & @@@ {lines}}] /. {excluColor, Point[pts__]} :> Flatten[{EdgeForm[Black], FaceForm[White], Module[{pt = #}, If[IntervalMemberQ[clipIntv, pt[[1]]], {}, Disk[pt, radius {1, 1/asprat rgy/rgx}] ] ] & /@ pts}] // Show[#, PlotRangeClipping -> False, PlotRangePadding -> Scaled[.05]] & ![discontinous points][3] [1]: https://i.sstatic.net/nSMNH.png [2]: https://i.sstatic.net/MdKOS.png [3]: https://i.sstatic.net/P2N7c.png