Note
Go to the end to download the full example code
Scatter plot with histograms
To create a scatter plot with histograms at the sides of the plot one
can use pygmt.Figure.plot in combination with
pygmt.Figure.histogram. The positions of the histograms are plotted
by offseting them from the main scatter plot figure using
pygmt.Figure.shift_origin.

import numpy as np
import pygmt
np.random.seed(19680801)
# Generate random data from a standard normal distribution centered on 0
x = np.random.randn(1000)
y = np.random.randn(1000)
# Get axis limits
xymax = max(np.max(np.abs(x)), np.max(np.abs(y)))
fig = pygmt.Figure()
fig.basemap(
    region=[-xymax - 0.5, xymax + 0.5, -xymax - 0.5, xymax + 0.5],
    projection="X10c/10c",
    frame=["WSrt", "a1"],
)
fillcol = "seagreen"
# Plot data points as circles with a diameter of 0.15 centimeters
fig.plot(x=x, y=y, style="c0.15c", fill=fillcol, transparency=50)
# Shift the plot origin and add top margin histogram
fig.shift_origin(yshift="10.25c")
fig.histogram(
    projection="X10c/2c",
    frame=["Wsrt", "xf1", "y+lCounts"],
    # Give the same value for ymin and ymax to have ymin and ymax
    # calculated automatically
    region=[-xymax - 0.5, xymax + 0.5, 0, 0],
    data=x,
    fill=fillcol,
    pen="0.1p,white",
    histtype=0,
    series=0.1,
)
# Shift the plot origin and add right margin histogram
fig.shift_origin(yshift="-10.25c", xshift="10.25c")
fig.histogram(
    horizontal=True,
    projection="X2c/10c",
    # Note that the y-axis annotation "Counts" is shown in x-axis direction
    # due to the rotation caused by horizontal=True
    frame=["wSrt", "xf1", "y+lCounts"],
    region=[-xymax - 0.5, xymax + 0.5, 0, 0],
    data=y,
    fill=fillcol,
    pen="0.1p,white",
    histtype=0,
    series=0.1,
)
fig.show()
Total running time of the script: ( 0 minutes 1.216 seconds)