matplotlib:如何根据某些变量更改数据点颜色

atr*_*ash 46 python matplotlib

我有2个变量(x,y)随时间(t)变化.我想绘制x与t的关系,并根据yeg的值为滴答的颜色设置为y的最高值,刻度颜色为深绿色,最低值为深红色,对于中间值,颜色将在绿色和红色.

这可以用python中的matplotlib完成吗?

Joe*_*ton 72

matplotlib.pyplot.scatter是为了什么.

作为一个简单的例子:

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 对于散点图以外的图,这可能吗?3d图?已经搜索了一段时间,似乎无法找到一种方法来做到这一点。 (3认同)
  • 谢谢,是有用的,仍然没有办法用`plot()`命令本身似乎(给`o`指定的标记的颜色映射) (3认同)
  • @SitzBlogz - 当然,只需使用自定义颜色图和规范.在你的例子中,`cmap,norm = mpl.colors.from_levels_and_colors([0,2,5,6],['red','green','blue'])`然后`ax.scatter(x,y) ,c = z,cmap = cmap,norm = norm)`. (2认同)
  • @GokhanArik - 如果没有指定色彩映射,`scatter`将使用默认色彩映射设置的任何内容.在你的情况下,你通过调用`plt.gray`,改变`.matplotlibrc`或使用带有灰度色彩图的样式将它设置为`gray`.要指定应使用哪个colormap散布,请使用`cmap` kwarg.例如:`cmap ="jet"`来重现这个例子. (2认同)

Pau*_*ice 5

如果要绘制线条而不是点,请参见此示例,在此处进行了修改,以根据需要绘制以黑/红表示功能的好点/坏点:

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()
Run Code Online (Sandbox Code Playgroud)