繁体   English   中英

Python 中的散点图和颜色映射

[英]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)可能会更复杂一些。 可以在此处找到单个子图 colorbar2 个子图 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()

使用 COLORBAR 散布子图

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM