How can I retrieve the automatically determined contour label coordinates in the example below?
matplotlib example from the documentation
import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2
fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z)
CS_labels = ax.clabel(CS, inline=True, fontsize=10)
ax.set_title('Simplest default with labels')
I would like to do something like
label_locations = CS_labels.get_label_coords()
So that I can start with an auto-selected set and modify manually as needed. This would be especially helpful when dealing with labels in geospatial coordinates.
Update:
The solution provided by swatchai works for both matplotlib and cartopy.
for txobj in CS.labelTexts:
pos = txobj.get_position()
txt = txobj.get_text()
print(pos, txt)
Label positions are best retrieved from the CS
object, instead of the CS_labels
object.
Note:
tdy's solution only works for matplotlib, but not when using cartopy GeoAxes, as ax.clabel()
returns 'NoneType'
for CS_labels
so CS_labels[0].get_position()
cannot be accessed that way.