Python中的散点图和颜色映射

我有一个存储在numpy数组中的点x和y的范围。 那些表示x(t)和y(t),其中t = 0 … T-1

我正在绘制使用散点图

import matplotlib.pyplot as plt plt.scatter(x,y) plt.show() 

我想有一个表示时间的颜色图(因此根据numpy数组中的索引给点着色)

最简单的方法是什么?

这是一个例子

 import numpy as np import matplotlib.pyplot as plt x = np.random.rand(100) y = np.random.rand(100) t = np.arange(100) plt.scatter(x, y, c=t) plt.show() 

在这里,您正在根据索引t设置颜色,它只是[1, 2, ..., 100]的数组。 在这里输入图像描述

也许一个更容易理解的例子是稍微简单的

 import numpy as np import matplotlib.pyplot as plt x = np.arange(100) y = x t = x plt.scatter(x, y, c=t) plt.show() 

在这里输入图像描述

请注意,您作为c传递的数组不需要具有任何特定的顺序或types,即不需要像这些示例中那样sorting或整数。 绘图程序将缩放色彩图,使得c中的最小/最大值对应于色彩图的底部/顶部。

色彩映射

您可以通过添加来更改颜色表

 import matplotlib.cm as cm plt.scatter(x, y, c=t, cmap=cm.cmap_name) 

导入matplotlib.cm是可选的,您也可以将colormap作为cmap="cmap_name"调用。 有一个颜色地图的参考页面 ,显示每个样子。 也知道你可以通过简单地调用它作为cmap_name_r来反转cmap_name_r 。 所以要么

 plt.scatter(x, y, c=t, cmap=cm.cmap_name_r) # or plt.scatter(x, y, c=t, cmap="cmap_name_r") 

将工作。 例子是"jet_r"cm.plasma_r 。 这是一个新的1.5色地图viridis的例子:

 import numpy as np import matplotlib.pyplot as plt x = np.arange(100) y = x t = x fig, (ax1, ax2) = plt.subplots(1, 2) ax1.scatter(x, y, c=t, cmap='viridis') ax2.scatter(x, y, c=t, cmap='viridis_r') plt.show() 

在这里输入图像描述

Colorbars

您可以使用添加一个颜色条

 plt.scatter(x, y, c=t, cmap='viridis') plt.colorbar() plt.show() 

在这里输入图像描述

请注意,如果您明确使用graphics和子图(例如fig, ax = plt.subplots()ax = fig.add_subplot(111) ),添加一个colorbar可能会更复杂一些。 好的例子可以在这里find一个单独的subplot colorbar和这里的2个subplots 1 colorbar 。

要添加到上面的wflynny的答案,您可以在这里find可用的颜色映射

例:

 import matplotlib.cm as cm plt.scatter(x, y, c=t, cmap=cm.jet) 

或者可选地,

 plt.scatter(x, y, c=t, cmap='jet')