【问题标题】:multi colored plots in matplotlib plt based on certain properties of datamatplotlib plt 基于数据的某些属性的多色图
【发布时间】:2014-02-22 20:08:34
【问题描述】:

我想根据 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()

【问题讨论】:

标签: python numpy matplotlib


【解决方案1】:

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

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

这里 colorline 的最后三个参数告诉它颜色数据以及如何映射它。

【讨论】:

  • 我在尝试这个时遇到了一个巨大的错误,我尝试了 2.7 和 3.3,我在这里复制了代码和错误pastebin.com/5DzfHRpb
  • @pyCthon 很抱歉。我原来的答案只适用于条形图。我已对其进行了更新,以包含一些我发现的关于对折线图执行相同操作的信息。
  • 谢谢!那也是来自有人评论的链接
  • scatter 也会获取颜色列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
  • 2014-11-12
  • 1970-01-01
相关资源
最近更新 更多