Я видел, что вы спрашивали предпочтительно seaborn
, но при необходимости это также может быть сделано в несколько строк кода только с matplotlib
и его LineCollection
:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib.collections import LineCollection
# DataFrame provided in example:
df = pd.DataFrame(
{'X1': [3, -5, 6], 'Y1': [2, 5, -3], 'X2': [7, 4, 5], 'Y2': [8, -6, -1]})
fig, ax = plt.subplots()
# Plot the (x1, y1) and (x2, y2) points in different colors
ax.scatter(df['X1'], df['Y1'], color='navy', s=100, lw=0, zorder=5)
ax.scatter(df['X2'], df['Y2'], color='darkorange', s=100, lw=0, zorder=6)
# Create the segments coordinates :
segments = df.T.apply(lambda x: [(x.loc['X1'], x['Y1']), (x['X2'], x['Y2'])])
# Use them in a LineCollection
lc = LineCollection(segments, zorder=4, cmap=plt.cm.Blues)
# Set different linewidth if necessary :
lc.set_linewidths(np.random.random_sample(size=len(segments)) * 2)
ax.add_collection(lc)