我有一系列的点x和y存储在numpy数组中。 那些代表x(t)和y(t),其中t = 0 ... T-1
我正在使用
绘制散点图import matplotlib.pyplot as plt
plt.scatter(x,y)
plt.show()
我想要一个表示时间的颜色图(因此根据numpy数组中的索引对点着色)
最简单的方法是什么?
答案 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]
的数组。
也许一个更容易理解的例子是稍微简单的
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"
。有一个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()
您可以使用
添加颜色栏plt.scatter(x, y, c=t, cmap='viridis')
plt.colorbar()
plt.show()
请注意,如果您明确使用数字和子图(例如fig, ax = plt.subplots()
或ax = fig.add_subplot(111)
),则添加颜色栏可能会更复杂一些。可以找到好的示例here for a single subplot colorbar和here 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()
请注意,您还将输出一个可以忽略的辅助图形。