我有一些点x和y存储在numpy数组中。它们代表x(t)和y(t),其中t = 0 ... T-1
我正在使用绘制散点图
import matplotlib.pyplot as plt
plt.scatter(x,y)
plt.show()
我想要一个代表时间的色图(因此根据numpy数组中的索引为点着色)
这样做最简单的方法是什么?
Answers:
这是一个例子
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个颜色条找到良好的示例。
cm.colormap_name
而cm.cmapname
不是实际的变量matplotlib.cm
; 它只是用于cm.jet
或的伪代码cm.veridis_r
,等等
cmap
或c
列表?
子图颜色栏
对于具有散点图的子图,您可以通过在辅助图形的帮助下构建“可映射”,然后将其添加到原始图形中,从而在轴上欺骗颜色栏。
作为以上示例的继续:
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()
请注意,您还将输出一个可以忽略的辅助图形。
plt.colorbar()
命令获得颜色的图例。