Matplotlib散点图; 颜色作为第三个变量的函数


152

我想制作一个散点图(使用matplotlib),其中根据第三个变量对点进行阴影处理。我对此非常了解:

plt.scatter(w, M, c=p, marker='s')

其中w和M是数据点,而p是我要针对其着色的变量。
但是我想用灰度而不是彩色来做。有人可以帮忙吗?

Answers:


156

无需手动设置颜色。相反,请指定灰度颜色图...

import numpy as np
import matplotlib.pyplot as plt

# Generate data...
x = np.random.random(10)
y = np.random.random(10)

# Plot...
plt.scatter(x, y, c=y, s=500)
plt.gray()

plt.show()

在此处输入图片说明

或者,如果您希望使用更大范围的颜色图,也可以将cmapkwarg 指定为scatter。要使用其中任何一个的反向版本,只需指定其中_r任何一个的“ ”版本即可。例如,gray_r而不是gray。有几种不同的灰度色彩映射预先制作的(如graygist_yargbinary,等)。

import matplotlib.pyplot as plt
import numpy as np

# Generate data...
x = np.random.random(10)
y = np.random.random(10)

plt.scatter(x, y, c=y, s=500, cmap='gray')
plt.show()

1
谢谢!无论如何,围绕这些包含一定总重量的点绘制轮廓?
Thomas Collett

6
mpl.cm也可以直接作为plt.cm
heltonbiker 2012年

@Thomas Collet:如果要绘制轮廓,则必须将数据从点插入到2D矩阵中,然后使用plt.contour()或进行绘制,plt.contourf()但这是一个不同的问题
Zak

如何在图例中添加标签?在这种情况下,如果使用连续数字,我怀疑您会使用颜色栏。如果是离散值呢?例如,我可以在图例中为我的三个类别添加3个标签吗?
Nate

26

在matplotlib中,可以将灰色表示为介于0-1之间的数字值。
例如c = '0.1'

然后,您可以将第三个变量转换为该范围内的值,并使用它为点着色。
在以下示例中,我将点的y位置用作确定颜色的值:

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [125, 32, 54, 253, 67, 87, 233, 56, 67]

color = [str(item/255.) for item in y]

plt.scatter(x, y, s=500, c=color)

plt.show()

在此处输入图片说明


3
作为记录,如果提供(n,4)形状的数组作为c参数,并且在第四列中包含alpha值,则可以将ALPHA用作颜色图。如果第三个变量是Z,则带有shape=(n,1),则 colors = numpy.hstack((numpy.zeros_like(z), numpy.zeros_like(z), numpy.ones_like(z), z/z.max()))效果非常好(当然可以对其进行调整)。
heltonbiker 2013年

我收到一个错误:“ rgba序列的长度应为3或4”
MattCochrane 2015年

1
@MattClimbs我怀疑您正在调用plt.plot而不是示例中的plt.scatter。
smashbro

如何在此图中添加颜色条?
FaCoffee,2013年

2
@FaCoffee plt.colorbar()会这样做
Mathew Savage

10

有时您可能需要根据x值情况精确绘制颜色。例如,您可能有一个包含3种类型的变量和一些数据点的数据框。您想做以下事情,

  • 在RED中绘制对应于物理变量'A'的点。
  • 在BLUE中绘制与物理变量“ B”相对应的点。
  • 在绿色中绘制对应于物理变量“ C”的点。

在这种情况下,您可能必须编写short函数以将x值映射为对应的颜色名称作为列表,然后将该列表传递给plt.scatter命令。

x=['A','B','B','C','A','B']
y=[15,30,25,18,22,13]

# Function to map the colors as a list from the input list of x variables
def pltcolor(lst):
    cols=[]
    for l in lst:
        if l=='A':
            cols.append('red')
        elif l=='B':
            cols.append('blue')
        else:
            cols.append('green')
    return cols
# Create the colors list using the function above
cols=pltcolor(x)

plt.scatter(x=x,y=y,s=500,c=cols) #Pass on the list created by the function here
plt.grid(True)
plt.show()

着色散点图作为x变量的函数


如何为此图创建一个颜色条?
Maryam Rahmani Moghaddam
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.