【问题标题】:How to pass rgb color values to python's matplotlib eventplot?如何将 rgb 颜色值传递给 python 的 matplotlib eventplot?
【发布时间】:2018-01-03 21:54:12
【问题描述】:

我只是想用 matplotlib 的 eventplot 绘制一些带有特定颜色的刻度线。我正在使用 %matplotlib inline 在 Jupyter notebook 中运行 Python 3。

这是一个示例代码:

import numpy as np
import matplotlib.pyplot as plt    
spikes = 100*np.random.random(100)
plt.eventplot(spikes, orientation='horizontal', linelengths=0.9, color=[0.3,0.3,0.5])

输出如下错误:

ValueError: colors and positions are unequal sized sequences

大概是因为我没有提供与数据长度相同的颜色列表(但我不希望它们都只是相同的颜色!)。当我使用像“深红色”或“兰花”这样的颜色字符串时,它也会出错。但是当我使用像 'r' 这样的简单单字母字符串时,它会起作用。

我真的只限于使用极其有限的一组单字母颜色字符串'r','b','g','k','m','y'等......还是制作使用此事件图时颜色列表很长?

【问题讨论】:

  • 您在提供color=[0.3,0.3,0.5] 时希望看到什么?当您提供一个列表作为颜色参数时,matplotlib 知道您希望第一个事件是颜色 [0],第二个是颜色 [1],......
  • 我希望每个刻度线都具有由 [0.3,0.3,0.5] 定义的颜色,这是一种深海军蓝色,我觉得比默认的“b”更适合眼睛。我真的必须列出每个元素为 [0.3,0.3,0.5] 的相同长度的数据列表吗?
  • 不,你不需要那个,尝试传递color = (0.3,0.3,0.5),这样,作为一个元组,应该可以工作。
  • 你确定吗?它对你有用吗?使用元组仍然对我不起作用:(
  • 是的,谢谢它有效!

标签: python matplotlib colors


【解决方案1】:

根据docs

你可以传递一个 (r, g, b) 或 (r, g, b, a) 元组,其中每个 r, g, b 和 a 在 [0,1] 范围内。

import numpy as np
import matplotlib.pyplot as plt

spikes = 100*np.random.random(100)
plt.eventplot(spikes, orientation='horizontal', linelengths=0.9, color = [(0.3,0.3,0.5)])

plt.show()

【讨论】:

  • 提醒任何为.plot 函数尝试这种颜色语法的人。在这种情况下,删除元组列表,但只给出一个 RGB 值的元组。
【解决方案2】:
# for a list of three plotted variables

df = data[['x', 'y', 'z']]
color_theme=[(52/235, 235/235, 86/235), (52/235, 70/235, 235/235), 
(165/235, 52/235, 235/235)]           
df.plot(color=color_theme)

# where numerators are the R,G,B numbers
# python only uses RGB in numbers <1
# denominator is obviously the max RGB quantity on a normal RGB scale

【讨论】:

  • 我确实相信最大 RGB 数量实际上是 256,因为它的范围在 0 到 255 之间
猜你喜欢
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 2017-08-12
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
相关资源
最近更新 更多