2015-12-15 104 views
1

我在python中绘制了一个使用matplotlib的散点图。我想基于一些功能转色点,像这样:基于matplotlib中函数的自定义颜色映射

import matplotlib.pyplot as plt 

def color(x, y): 
    # based on some rules, return a color 
    if(condition): 
     return 'red' 
    else: 
     return 'blue' 

plt.scatter(index, data) #c= something? 

我知道了matplotlib.from_levels_and_colors功能的,但问题是,映射不是基于在x的值的水平或y轴。每个数据点都有一个由函数计算出来的第三个值,这就是我想要基于的颜色点。

有没有办法做到这一点?

回答

2

你为什么不只是让你的c阵列的默认颜色映射的指示功能。例如:

import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(100) 
y = np.arange(100) 
# Colors whether or not x+y is a multiple of 5 
c = (x + y)%5 == 0 

# Use 'jet' colormap for red/blue. 
plt.scatter(x, y, c=c, cmap='jet') 

enter image description here

当然,你可以使用与将被映射到0和1

如果你期望的结果有2点以上的颜色,那么它的不同极端的一个颜色表完全可以通过作为c具有许多不同值的数组(并且不需要归一化)。示例见here

+1

虽然我没有最终使用这种方式,但我会接受它,因为它比我的方式更清洁 – bobroxsox

1

这是我最终这样做的方式。我基于x和y值创建了一个颜色列表,然后将其传递给分散函数。并不像wflynny的答案那样好,但它的确意味着您可以根据需要进行尽可能多的计算来创建数组,而不必创建一个函数来完成它。

import matplotlib.pyplot as plt 

colors = calculate_colors(x, y) 
plt.scatter(index, data, c=colors) 
相关问题