【问题标题】:Python matplotlib scatter plot : changing colour of data points based on given conditionsPython matplotlib散点图:根据给定条件改变数据点的颜色
【发布时间】:2013-10-08 23:54:35
【问题描述】:

我有以下数据(四个等长数组):

a = [1, 4, 5, 2, 8, 9, 4, 6, 1, 0, 6]
b = [4, 7, 8, 3, 0, 9, 6, 2, 3, 6, 7]
c = [9, 0, 7, 6, 5, 6, 3, 4, 1, 2, 2]
d = [La, Lb, Av, Ac, Av, By, Lh, By, Lg, Ac, Bt]

我正在制作数组 a、b、c 的 3d 图:

import pylab
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(a,b,c)

plt.show()

现在,我想使用名为“d”的数组为这些散点着色,这样;如果 d 中对应的第 i 个元素值的第一个字母是“L”,则将点着色为红色,如果以“A”开头,则将其着色为绿色,如果以“B”开头,则将其着色为蓝色。

所以,第一个点 (1,4,9) 应该是红色,第二个点 (4,7,0) 也是红色,第三个点 (5,8,7) 应该是绿色等等..

有可能吗?如果你有什么想法请帮忙:)

【问题讨论】:

  • d 是字符串列表还是那些变量名?如果是字符串,它应该看起来像:d = ['La', 'Lb', 'Av', ...]
  • 大概你在文件的某处使用from mpl_toolkits.mplot3d import Axes3D
  • 你是对的,它实际上是d = ['La', 'Lb', 'Av', ...]。我正在处理一个复杂的大问题,这是我卡住的一小部分。因此我创建了这个简单的示例示例来问我的问题。忘记记住这两个小细节。对不起!跨度>

标签: python colors matplotlib plot


【解决方案1】:

正如scatter 的文档所述,您可以传递c 参数:

c : 颜色或颜色序列,可选,默认

c 可以是单个颜色格式字符串,也可以是一系列颜色规范 长度为 N,或要映射到的 N 个数字序列 使用通过 kwargs 指定的 cmap 和 norm 颜色(见下文)。笔记 c 不应该是单个数字 RGB 或 RGBA 序列,因为 这与要进行颜色映射的值数组无法区分。 C 但是,可以是一个二维数组,其中的行是 RGB 或 RGBA。

类似

use_colours = {"L": "red", "A": "green", "B": "blue"}
ax.scatter(a,b,c,c=[use_colours[x[0]] for x in d],s=50)

应该产生

【讨论】:

  • 我打算建议使用np.select 而不是字典,但你必须聪明地从字符串数组中获取第一个字符:c=np.select(map(lambda s: s==da.view('S1,S1')['f0'], ['L', 'A', 'B']),['red','green','blue'])c=np.select(map(lambda s: s==da.view('S1,S1')['f0'], use_colours.keys()),use_colours.values()),但当然可以除非颜色数量少而点数多,否则这是不值得的。
  • @DSM : 谢谢,我没想到(根据对应单词的第一个字母分配颜色)这么简单:) 非常感谢!!!
【解决方案2】:

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.scatter

c : color or sequence of color, optional, default

"c 可以是单个颜色格式字符串,也可以是长度为 N 的颜色规范序列,或使用通过 kwargs 指定的 cmap 和 norm 映射到颜色的 N 数字序列(见下文)。注意 c不应是单个数字 RGB 或 RGBA 序列,因为这与要进行颜色映射的值数组无法区分。c 可以是二维数组,其中行是 RGB 或 RGBA。"

你试过了吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 2014-09-10
    • 2011-08-29
    • 2017-07-19
    • 2022-01-13
    • 1970-01-01
    • 2016-01-17
    相关资源
    最近更新 更多