matplotlib: comment changer la couleur des points de données en fonction d'une variable

J'ai 2 variables (x,y) qui changent avec le temps (t). Je veux tracer x vs. t et colorer les tiques en fonction de la valeur de Y. Par exemple, pour les valeurs les plus élevées de y, la couleur de la tique est vert foncé, pour la valeur la plus basse est Rouge foncé, et pour les valeurs intermédiaires, la couleur sera mise à l'échelle entre le vert et le rouge.

Cela Peut-il être fait avec matplotlib en python?

43
demandé sur Eric Leschinski 2011-10-25 01:08:04

2 réponses

C'est à quoi sert matplotlib.pyplot.scatter.

Comme exemple rapide:

import matplotlib.pyplot as plt
import numpy as np

# Generate data...
t = np.linspace(0, 2 * np.pi, 20)
x = np.sin(t)
y = np.cos(t)

plt.scatter(t,x,c=y)
plt.show()

entrez la description de l'image ici

66
répondu Joe Kington 2011-10-24 21:51:22

Si vous voulez tracer des lignes au lieu de points, consultez cet exemple , modifié ici pour tracer des points bons/mauvais représentant une fonction en noir/rouge selon le cas:

def plot(xx, yy, good):
    """Plot data

    Good parts are plotted as black, bad parts as red.

    Parameters
    ----------
    xx, yy : 1D arrays
        Data to plot.
    good : `numpy.ndarray`, boolean
        Boolean array indicating if point is good.
    """
    import numpy as np
    import matplotlib.pyplot as plt
    fig, ax = plt.subplots()
    from matplotlib.colors import from_levels_and_colors
    from matplotlib.collections import LineCollection
    cmap, norm = from_levels_and_colors([0.0, 0.5, 1.5], ['red', 'black'])
    points = np.array([xx, yy]).T.reshape(-1, 1, 2)
    segments = np.concatenate([points[:-1], points[1:]], axis=1)
    lines = LineCollection(segments, cmap=cmap, norm=norm)
    lines.set_array(good.astype(int))
    ax.add_collection(lines)
    plt.show()
1
répondu Paul Price 2018-04-26 20:44:50