使用第三数据序列指定颜色的matplotlib散点图

时间:2019-11-14 16:53:54

标签: pandas matplotlib

我有3个共享相同索引值的数据系列:

系列a
0.6
B 0.4
C 0.7
D 0.5

b系列
A 0.8
B 0.4
C 0.7
D 0.5

系列c
A 10
B 23
C 50
D 100

系列a和b是我的x和y轴。我想使用系列c来指定点的颜色(如果c处的值> 80,则颜色=红色elif值,在c> 20处,则颜色=蓝色)。

这是到目前为止我的代码:

colors = 'black'  #default color
plt.scatter(a, b, s=np.pi*1, c=colors, alpha=0.5)
    #this is what I'm looking for
    #if value at c > 80 then colors = red elif value at c > 20 then colors = blue
plt.show()

这是成品图的样子:

example

谢谢!

2 个答案:

答案 0 :(得分:0)

您要np.select定义颜色:

colors = np.select((c>80, c>20), ('r','b'), default='g')
plt.scatter(a,b, c=colors)

输出:

enter image description here

答案 1 :(得分:0)

另一种方式,但不如@ quang-hoang那么简洁。

根据您的条件创建一个函数,然后applydf

def colors(row):
    if row.v > 80: return 'red'
    elif row.v > 20: return 'blue' 
    else: return 'green'

df['colors'] = df.apply(colors, axis=1)

给你这个:

     x    y      v colors
A  0.6  0.8   10.0  green
B  0.4  0.4   23.0   blue
C  0.7  0.7   50.0   blue
D  0.5  0.5  100.0    red

df.plot.scatter('x', 'y', c=df.colors)

enter image description here