matplotlib - 沿绘图线更改标记颜色 [英] matplotlib - change marker color along plot line

查看:44
本文介绍了matplotlib - 沿绘图线更改标记颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用 matplotlib 绘制一个二维数据集,以便每个数据点的标记颜色都不同.我在多色线上找到了这个例子(http://matplotlib.org/examples/pylab_examples/multicolored_line.html).但是,在绘制带有标记的线时,这似乎不起作用.

I would like to plot a 2d data set with matplotlib such that the marker color for each data point is different. I found the example on multicolored lines (http://matplotlib.org/examples/pylab_examples/multicolored_line.html). However, this does not seem to work when plotting a line with markers.

我提出的解决方案分别绘制了每个点:

The solution I came up with individually plots every point:

import matplotlib.cm as cm
import matplotlib.pyplot as plt
import numpy as np

# The data
x = np.linspace(0, 10, 1000)
y = np.sin(2 * np.pi * x)

# The colormap
cmap = cm.jet

# Create figure and axes
fig = plt.figure(1)
fig.clf()
ax = fig.add_subplot(1, 1, 1)

# Plot every single point with different color
for i in range(len(x)):
    c = cmap(int(np.rint(x[i] / x.max() * 255)))
    ax.plot(x[i], y[i], 'o', mfc=c, mec=c)
    ax.set_xlim([x[0], x[-1]])
    ax.set_ylim([-1.1, 1.1])
    ax.set_xlabel('x')
    ax.set_ylabel('y')

plt.draw()
plt.show()

# Save the figure
fig.savefig('changing_marker_color.png', dpi=80)

结果图看起来应该是这样,但绘图变得非常慢,我需要它非常快.有一个巧妙的技巧可以加快绘图速度吗?

The resulting plot looks like as it should but the plotting gets really slow and I need it quite fast. Is there a clever trick to speed up the plotting?

推荐答案

我相信您可以使用 ax.scatter 来实现:

I believe you can achieve this with ax.scatter:

# The data
x = np.linspace(0, 10, 1000)
y = np.sin(2 * np.pi * x)

# The colormap
cmap = cm.jet

# Create figure and axes
fig = plt.figure(1)
fig.clf()
ax = fig.add_subplot(1, 1, 1)

c = np.linspace(0, 10, 1000)
ax.scatter(x, y, c=c, cmap=cmap)

Scatter 接受 c 作为浮点序列,这些浮点数将使用 cmap 映射到颜色.

Scatter accepts c as a sequence of floats which will be mapped to colors using the cmap.

使用 timeit 我的时间减少了 10 倍(原始方法约为 1.25 秒,此处为 76.8 毫秒)

Using timeit I get a 10 fold decrease in time (about 1.25 secs for the original method and 76.8 ms here)

这篇关于matplotlib - 沿绘图线更改标记颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆