Note
Go to the end to download the full example code.
NCL_scatter_6.py#
- This script illustrates the following concepts:
Drawing a scatter plot with markers of different colors and sizes
Drawing outlined and filled markers on a polar map plot
Generating dummy data using “random”
Changing the marker colors on a polar map plot
Changing the marker sizes on a polar map plot
Turning off y-axis labels
- See following URLs to see the reproduced NCL plot & script:
Original NCL script: https://www.ncl.ucar.edu/Applications/Scripts/scatter_6.ncl
Original NCL plot: https://www.ncl.ucar.edu/Applications/Images/scatter_6_lg.png
Import packages:
import numpy as np
import matplotlib.pyplot as plt
Create dummy data:
numpoints = 100
lon = np.random.uniform(0, 360, numpoints)
lat = np.random.uniform(5, 90, numpoints)
# Generate a figure
fig = plt.figure(figsize=(8, 8))
# Create axis with a polar projection
ax = fig.add_subplot(111, projection='polar')
ax.set_ylim([0, 90])
# Change orientation of projection
ax.set_theta_zero_location("S")
# Create array of marker colors
colors = ("limegreen", "orange", "green", "red", "yellow", "purple", "blue",
"red", "brown", "crimson", "skyblue")
# Create array of marker sizes
bins = np.linspace(100, 2000, 10)
# Plot all points
# longitude points must be transformed from degrees to radians
# to be plotted on polar projection
for x in range(numpoints):
ax.scatter((np.pi / 180.0) * lon[x],
lat[x],
color=colors[x % 10],
s=bins[x % 10],
edgecolors='black',
linewidths=1,
alpha=0.9,
zorder=2)
# set the labels and locations of the angular gridlines
linelabels = ('0', '30E', '60E', '90E', '120E', '150E', '180', '150W', '120W',
'90E', '60E', '30E')
lines, labels = plt.thetagrids(range(0, 360, 30), linelabels, fontsize=12)
# Create distance between the x tick labels and the axis
ax.tick_params(axis='x', pad=10)
# Set y-axis gridlines and turn off y-axis labels
ax.set_yticks([0, 20, 40, 60, 80, 100])
ax.set_yticklabels([])
# Make gridlines dashed
ax.grid(linestyle='--')
plt.show()
Total running time of the script: (0 minutes 0.536 seconds)