Plot dashed line interrupted with data (similar to contour plot)
Quick and dirty answer using annotate
:
import matplotlib.pyplot as pltimport numpy as npx = list(reversed([1.81,1.715,1.78,1.613,1.629,1.714,1.62,1.738,1.495,1.669,1.57,1.877,1.385]))y = [0.924,0.915,0.914,0.91,0.909,0.905,0.905,0.893,0.886,0.881,0.873,0.873,0.844]def plot_with_text(x, y, text, text_count=None): text_count = (2 * (len(x) / len(text))) if text_count is None else text_count fig, ax = plt.subplots(1,1) l, = ax.plot(x,y) text_size = len(text) * 10 idx_step = len(x) / text_count for idx_num in range(text_count): idx = int(idx_num * idx_step) text_pos = [x[idx], y[idx]] xscreen = ax.transData.transform(zip(x[max(0, idx-1):min(len(x), idx+2)], y[max(0, idx-1):min(len(y), idx+2)])) a = np.abs(np.gradient(xscreen)[0][0]) rot = np.rad2deg(np.arctan2(*a)) - 90 ax.annotate(text, xy=text_pos, color="r", bbox=dict(ec="1", fc="1", alpha=0.9), rotation=rot, ha="center", va="center")plot_with_text(x, y, "test")
Yields:
You can play with the offsets for more pleasing results.