Python中的散点图和颜色映射

Vin*_*ent 78 python matplotlib

我有一系列的点x和y存储在numpy数组中.那些代表x(t)和y(t),其中t = 0 ... T-1

我正在使用绘制散点图

import matplotlib.pyplot as plt

plt.scatter(x,y)
plt.show()
Run Code Online (Sandbox Code Playgroud)

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

最简单的方法是什么?

wfl*_*nny 140

这是一个例子

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

在这里,您将根据索引设置颜色,该索引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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,您传递的数组c不需要具有任何特定的顺序或类型,即它不需要像这些示例中那样进行排序或整数.绘图例程将缩放色彩映射,使得最小值/最大值c对应于色彩映射的底部/顶部.

色彩映射

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

import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.cmap_name)
Run Code Online (Sandbox Code Playgroud)

导入matplotlib.cm是可选的,因为您也可以调用colormaps cmap="cmap_name".有一个颜色图的参考页面显示每个颜色图的样子.也知道你可以通过简单地调用它来反转色彩映射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")
Run Code Online (Sandbox Code Playgroud)

将工作.例子是"jet_r"cm.plasma_r.这是一个新的1.5 colormap 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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Colorbars

您可以使用添加颜色栏

plt.scatter(x, y, c=t, cmap='viridis')
plt.colorbar()
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,如果您明确使用数字和子图(例如fig, ax = plt.subplots()ax = fig.add_subplot(111)),添加颜色条可能会更复杂一些.这里可以找到一个好的例子,用于单个子图颜色条,这里有2个子图1个颜色条.

  • 您可以使用“plt.colorbar()”命令获取颜色的图例。 (2认同)

Nat*_*han 10

要添加到上面的wflynny答案,您可以在此处找到可用的色彩映射

例:

import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.jet)
Run Code Online (Sandbox Code Playgroud)

或者,

plt.scatter(x, y, c=t, cmap='jet')
Run Code Online (Sandbox Code Playgroud)


小智 5

子图颜色条

对于散点图,您可以通过在辅助图形的帮助下构建“可映射”并将其添加到原始图中来将颜色条欺骗到轴上。

作为上面例子的延续:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
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')


# Build your secondary mirror axes:
fig2, (ax3, ax4) = plt.subplots(1, 2)

# Build maps that parallel the color-coded data
# NOTE 1: imshow requires a 2-D array as input
# NOTE 2: You must use the same cmap tag as above for it match
map1 = ax3.imshow(np.stack([t, t]),cmap='viridis')
map2 = ax4.imshow(np.stack([t, t]),cmap='viridis_r')

# Add your maps onto your original figure/axes
fig.colorbar(map1, ax=ax1)
fig.colorbar(map2, ax=ax2)
plt.show()
Run Code Online (Sandbox Code Playgroud)

使用 COLORBAR 散布子图

请注意,您还将输出一个可以忽略的辅助数字。