matplotlib plt中的多色图基于数据的某些属性

时间:2014-02-22 20:08:34

标签: python numpy matplotlib

我想根据y轴上的数据集的以下颜色绘制线条。

if data > 0:
  color = 'r'
if data = 0:
  color = 'g'
if data < 0:
  color = 'b'

不幸的是,我只知道如何为整个数据集着色一种颜色。我也无法在网上找到任何东西。我假设有一种方法可以在每次颜色变化时不分解数据集。

以下是仅使用一种颜色绘制数据的示例。

import matplotlib.pyplot as plt
import numpy as np

# Simple data 
x = np.linspace(0, 2 * np.pi, 400)
data = np.sin(x ** 2)

#plot
f, ax = plt.subplots()
ax.plot(x, data, color='r')

plt.show()

1 个答案:

答案 0 :(得分:2)

color参数实际上可以将列表作为参数。例如,这里有一段简单的代码,根据数据是正面还是负面来设置颜色列表:

colors = []
for item in data:
    if item < 0:
        colors.append('r')
    else:
        colors.append('g')

然后简单地说:

ax.bar(x, data, color=colors)

编辑:所以我测试了它,似乎我的答案仅适用于条形图。我在matplotlib文档中找不到任何似乎表明可以使用多种颜色着色线图的任何内容。我做了,但找到了this site,我相信它有你想要的信息。那里的人定义了自己的功能来实现它。

在我的链接中使用该文件,这是一个等效的折线图版本:

cmap = ListedColormap(['r', 'g']) # use the colors red and green
norm = BoundaryNorm([-1000,0,1000], cmap.N) # map red to negative and green to positive
                                            # this may work with just 0 in the list
fig, axes = plt.subplots()
colorline(x, data, data, cmap=cmap, norm=norm)

plt.xlim(x.min(), x.max())
plt.ylim(data.min(), data.max())

plt.show()

此处色线的最后三个参数告诉它颜色数据以及如何映射它。