Binned Scatter
Similar to a scattering plot, but with the size (or color) of each scattered point reflecting how much data is at that point. Suitable for scatter-plotting a large amount of data.
The parameter binning_algorithm is one of: Automatic, Scott, FD, Integers,
Sturges, Sqrt (same as for histogram).
The parameter bin_scatter_style is one of: Automatic, Point_size, Point_alpha,
Jitter, Point_colormap, Heatmap.
Functions
=============================== =========================== Function Description =============================== =========================== binscatter() 2 functions Plot a binned scatter plot. =============================== ===========================
Description ^^^^^^^^^^^
.. function:: binscatter(x, y, binning_algorithm, bin_scatter_style)
:param x: Vector<Float64>
:param y: Vector<Float64>
:param binning_algorithm: BinningAlgorithm, named parameter, default to Automatic.
:param bin_scatter_style: BinScatterStyle, named parameter, default to Automatic
:return: AxesObject
Produce a binned scatter plot using data ``x`` and ``y``.
.. function:: binscatter(x, y, nbins_x, nbins_y, binning_algorithm, bin_scatter_style)
:param x: Vector<Float64>
:param y: Vector<Float64>
:param nbins_x: Int64
:param nbins_x: Int64
:param binning_algorithm: BinningAlgorithm, named parameter, default to Automatic.
:param bin_scatter_style: BinScatterStyle, named parameter, default to Automatic
:return: AxesObject
Produce a binned scatter plot using data ``x`` and ``y``.
Examples
- Comparison between scatter plot and binned scatter plot.
::
var r: Random = Random(0)
let x_reduced = randn(r, 1000, 0.0, 1.0)
let y_reduced = x_reduced * 2.0 + rand(r, 1000)
subplot(1, 2, 0)
scatter(x_reduced, y_reduced)
title("Scatter plot (n=1000)")
let x = randn(r, 500000, 0.0, 1.0)
let y = x * 2.0 + rand(r, 500000)
subplot(1, 2, 1)
binscatter(x, y)
axis(Tight)
title("Binned Scatter plot (n=500000)")
Result:
.. image:: ../../../tests/imgs/bin_scatter/bin_scatter_1.png
- Comparison between different bin scatter styles.
::
var r: Random = Random(0)
let x: Vector<Float64> = randn(r, 100000, 0.0, 1.0)
let y: Vector<Float64> = x * 2.0 + rand(r, 100000)
let x_line = x[0..1000]
let y_line = y[0..1000]
subplot(2,3,0)
scatter(x_line, y_line)
title("Scatter")
subplot(2,3,1)
binscatter(x, y, bin_scatter_style:Point_size)
title("Bin Scatter: Point Size")
subplot(2,3,2)
binscatter(x, y, bin_scatter_style:Point_alpha)
title("Bin Scatter: Point Alpha")
subplot(2,3,3)
binscatter(x, y, bin_scatter_style:Point_colormap)
title("Bin Scatter: Point Colormap")
subplot(2,3,4)
binscatter(x, y, bin_scatter_style:Heatmap)
title("Bin Scatter: Heatmap")
subplot(2,3,5)
binscatter(x, y, bin_scatter_style:Jitter)
title("Bin Scatter: Jitter")
Result:
.. image:: ../../../tests/imgs/bin_scatter/bin_scatter_2.png
- Comparison between different binning algorithm.
::
let f = gcf()
f.width(f.width() * 2)
f.height(f.height() * 2)
f.x_position(200)
f.y_position(100)
var r: Random = Random(0)
let x: Vector<Float64> = randn(r, 100000, 0.0, 1.0)
let y: Vector<Float64> = x * 2.0 + rand(r, 100000)
var b = BinScatterStyle.Automatic
subplot(2,3,0)
binscatter(x, y, binning_algorithm: BinningAlgorithm.Automatic, bin_scatter_style: b)
title("Automatic")
subplot(2,3,1)
binscatter(x, y, binning_algorithm: BinningAlgorithm.Integers, bin_scatter_style: b)
axis(Tight)
title("Integers")
subplot(2,3,2)
binscatter(x, y, binning_algorithm: BinningAlgorithm.Scott, bin_scatter_style: b)
axis(Tight)
title("Scott's rule")
subplot(2,3,3)
binscatter(x, y, binning_algorithm: BinningAlgorithm.FD, bin_scatter_style: b)
axis(Tight)
title("Freedman-Diaconis rule")
subplot(2,3,4)
binscatter(x, y, binning_algorithm: BinningAlgorithm.Sqrt, bin_scatter_style: b)
axis(Tight)
title("Square root rule")
subplot(2,3,5)
binscatter(x, y, binning_algorithm: BinningAlgorithm.Sturges, bin_scatter_style: b)
axis(Tight)
title("Sturges' rule")
Result:
.. image:: ../../../tests/imgs/bin_scatter/bin_scatter_3.png
- Comparison between different normalization.
::
let f = gcf()
f.width(f.width() * 2)
f.height(f.height() * 2)
f.x_position(200)
f.y_position(100)
var r: Random = Random(0)
let x: Vector<Float64> = randn(r, 100000, 0.0, 1.0)
let y: Vector<Float64> = x * 2.0 + rand(r, 100000)
var b = BinScatterStyle.Heatmap
var a = BinningAlgorithm.Automatic
subplot(2,3,0)
binscatter(x, y, binning_algorithm: a, bin_scatter_style: b,
normalization_alg: Normalization.Count)
axis(Tight)
title("Normalization: Count")
subplot(2,3,1)
binscatter(x, y, binning_algorithm: a, bin_scatter_style: b,
normalization_alg: Normalization.Probability)
axis(Tight)
title("Normalization: Probability")
subplot(2,3,2)
binscatter(x, y, binning_algorithm: a, bin_scatter_style: b,
normalization_alg: Normalization.CumulativeCount)
axis(Tight)
title("Normalization: Cumulative count")
subplot(2,3,3)
binscatter(x, y, binning_algorithm: a, bin_scatter_style: b,
normalization_alg: Normalization.CountDensity)
axis(Tight)
title("Normalization: Count density")
subplot(2,3,4)
binscatter(x, y, binning_algorithm: a, bin_scatter_style: b,
normalization_alg: Normalization.Pdf)
axis(Tight)
title("Normalization: PDF")
subplot(2,3,5)
binscatter(x, y, binning_algorithm: a, bin_scatter_style: b,
normalization_alg: Normalization.Cdf)
axis(Tight)
title("Normalization: CDF")
Result:
.. image:: ../../../tests/imgs/bin_scatter/bin_scatter_4.png
- Binned sactter plots with custom nbins_x and nbins_y.
::
let f = gcf()
f.width(f.width() * 2)
f.height(f.height() * 2)
f.x_position(200)
f.y_position(100)
f.quiet_mode(true)
var r: Random = Random(0)
let x: Vector<Float64> = randn(r, 10000, 0.0, 1.0)
let y: Vector<Float64> = randn(r, 10000, 0.0, 1.0)
subplot(2,3,0)
scatter(x, y)
title("Scatter plot")
subplot(2,3,1)
binscatter(x, y, 30, 10, bin_scatter_style: Point_size)
title("Binned scatter plot: Point size")
subplot(2, 3, 2)
binscatter(x, y, 30, 10, bin_scatter_style: Point_alpha)
title("Binned scatter plot: Point alpha")
subplot(2, 3, 3)
binscatter(x, y, 30, 10, bin_scatter_style: Jitter)
title("Binned scatter plot: Jitter")
subplot(2, 3, 4)
binscatter(x, y, 30, 10, bin_scatter_style: Point_colormap)
title("Binned scatter plot: Colormap")
subplot(2, 3, 5)
binscatter(x, y, 30, 10, bin_scatter_style: Heatmap)
title("Binned scatter plot: Heatmap")
axis(Tight)
Result:
.. image:: ../../../tests/imgs/bin_scatter/bin_scatter_5.png
- Binned scatter plot of random normal distribution.
::
var r: Random = Random(0)
let x: Vector<Float64> = randn(r, 100000, 0.0, 1.0)
let y: Vector<Float64> = randn(r, 100000, 0.0, 1.0)
binscatter(x, y, bin_scatter_style: Point_colormap)
Result:
.. image:: ../../../tests/imgs/bin_scatter/bin_scatter_6.png
- Binned scatter plot of random normal distribution, in heatmap style.
::
var r: Random = Random(0)
let x: Vector<Float64> = randn(r, 100000, 0.0, 1.0)
let y: Vector<Float64> = randn(r, 100000, 0.0, 1.0)
binscatter(x, y, 20, 30, bin_scatter_style: Heatmap)
axis(Tight)
Result:
.. image:: ../../../tests/imgs/bin_scatter/bin_scatter_7.png