Python中的散点图和颜色映射

Python中的散点图和颜色映射,python,matplotlib,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数组中的索引为点着色) 最简单的方法是什么?下面是一个例子 import numpy as np import matplotlib.pyplot as plt x = np.random.rand(100) y =

我有一系列的点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\u name”
。有一系列彩色地图显示了每一张的样子。还知道,只需将颜色映射称为
cmap\u name\u r
即可反转颜色映射。所以

plt.scatter(x, y, c=t, cmap=cm.cmap_name_r)
# or
plt.scatter(x, y, c=t, cmap="cmap_name_r")
会有用的。例如
“jet\u r”
cm.plasma\u 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.subplot()
ax=fig.add\u subplot(111)
),则添加颜色条可能更复杂。你可以找到很好的例子,这里有一个例子

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\u name”
。有一系列彩色地图显示了每一张的样子。还知道,只需将颜色映射称为
cmap\u name\u r
即可反转颜色映射。所以

plt.scatter(x, y, c=t, cmap=cm.cmap_name_r)
# or
plt.scatter(x, y, c=t, cmap="cmap_name_r")
会有用的。例如
“jet\u r”
cm.plasma\u 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.subplot()
ax=fig.add\u subplot(111)
),则添加颜色条可能更复杂。可以找到好的示例,并且。

要添加到wflynny的上述答案中,您可以找到可用的颜色贴图

例如:

或者,


要添加到wflynny上面的答案中,您可以找到可用的颜色贴图

例如:

或者,


子批次颜色栏

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

作为上述示例的延续:

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


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

子批次颜色栏

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

作为上述示例的延续:

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()
命令获取颜色图例。此处的代码似乎已更改。cmap=cm.colormap\u名称现在应为cmap=cm.cmapname。@cmarti1138我不确定您的意思,
cm.colormap_name
cm.cmapname
不是
matplotlib.cm
中的实际变量;这只是
cm.jet
cm.veridis_r
等的伪代码。这个答案的核心元素是
c=np.arange(len(x))
plt.legend(“wflynny”)你可以通过
plt.colorbar()获得颜色的图例
命令。此处的代码似乎已更改。cmap=cm.colormap\u名称现在应为cmap=cm.cmapname。@cmarti1138我不确定您的意思,
cm.colormap\u名称和
cm.cmapname
不是
matplotlib.cm
中的实际变量;这只是
cm.jet
cm.veridis\u r
等的伪代码。这个答案的核心元素是
c=np.arange(len(x))
plt.legend(“wflynny”)