Python中的散点图和颜色映射

时间:2013-07-16 16:36:32

标签: python matplotlib

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

我正在使用

绘制散点图
import matplotlib.pyplot as plt

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

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

最简单的方法是什么?

3 个答案:

答案 0 :(得分:130)

这是一个例子

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]的数组。 enter image description here

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

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

enter image description here

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

色彩映射表

您可以通过添加

来更改色彩映射
import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.cmap_name)

导入matplotlib.cm是可选的,因为您也可以将色彩映射称为cmap="cmap_name"。有一个reference page的彩色地图显示了每个人的样子。还要知道您可以通过简单地将其称为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 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()

enter image description here

Colorbars

您可以使用

添加颜色栏
plt.scatter(x, y, c=t, cmap='viridis')
plt.colorbar()
plt.show()

enter image description here

请注意,如果您明确使用数字和子图(例如fig, ax = plt.subplots()ax = fig.add_subplot(111)),则添加颜色栏可能会更复杂一些。可以找到好的示例here for a single subplot colorbarhere for 2 subplots 1 colorbar

答案 1 :(得分:8)

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

实施例:

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

或者,

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

答案 2 :(得分:1)

子图颜色栏

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

作为上述示例的延续:

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

Scatter subplots with COLORBAR

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