[英]Scatter plot and Color mapping in Python
我有一系列点 x 和 y 存储在 numpy 数组中。 那些代表 x(t) 和 y(t) 其中 t=0...T-1
我正在绘制散点图
import matplotlib.pyplot as plt
plt.scatter(x,y)
plt.show()
我想要一个表示时间的颜色图(因此根据 numpy 数组中的索引为点着色)
最简单的方法是什么?
这是一个例子
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
来反转颜色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)
),添加ax = fig.add_subplot(111)
可能会更复杂一些。 可以在此处找到单个子图 colorbar和2 个子图 1 colorbar 的好示例。
要添加到上面 wflynny 的答案,您可以在 此处找到可用的颜色图
例子:
import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.jet)
或者,
plt.scatter(x, y, c=t, cmap='jet')
子图颜色条
对于散点图,您可以在辅助图形的帮助下构建“可映射”,然后将其添加到原始图中,从而将颜色条欺骗到轴上。
作为上面例子的延续:
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()
请注意,您还将输出一个可以忽略的辅助数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.