Python中的散点图和颜色映射


91

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

我正在使用绘制散点图

import matplotlib.pyplot as plt

plt.scatter(x,y)
plt.show()

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

这样做最简单的方法是什么?

Answers:


168

这是一个例子

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不需要具有任何特定的顺序或类型,即,不需要像这些示例中那样对数组或整数进行排序。绘制例程将缩放颜色图,以使最小值/最大值c对应于颜色图的底部/顶部。

色彩图

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

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

导入matplotlib.cm是可选的,因为您也可以调用颜色图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")

将工作。例如"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()

在此处输入图片说明

彩条

您可以使用添加色条

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

在此处输入图片说明

请注意,如果您明确使用图形和子图(例如fig, ax = plt.subplots()ax = fig.add_subplot(111)),则添加颜色条可能会涉及更多。可以在此处找到单个子图颜色条的良好示例,在此处为2个子图1个颜色条找到良好的示例。


1
您可以使用plt.colorbar()命令获得颜色的图例。
drevicko

该代码似乎已在此处更改。cmap = cm.colormap_name现在应为cmap = cm.cmapname。
克里斯

@ cmarti1138我不知道你的意思,cm.colormap_namecm.cmapname不是实际的变量matplotlib.cm; 它只是用于cm.jet或的伪代码cm.veridis_r,等等
wflynny15年

有没有办法更改已绘制曲线的cmapc列表?
Guimoute

10

要添加到上述wflynny的答案中,您可以在此处找到可用的颜色图

例:

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

或者,

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

3

子图颜色栏

对于具有散点图的子图,您可以通过在辅助图形的帮助下构建“可映射”,然后将其添加到原始图形中,从而在轴上欺骗颜色栏。

作为以上示例的继续:

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()

使用COLORBAR散布子图

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.