繁体   English   中英

如何根据第三列值绘制带有颜色的2D数据点

[英]How to plot 2D data points with color according to third column value

假设我有一个包含三列的数组:

>>>print(arr)
array(
    [[1 2 -1]
    [1 3 1]
    [3 2 -1]
    [5 2 -1]]
)

假设我想将其转换为散点图:

plt.plot(arr[:,0], arr[:,1], 'xr')

工作正常。 但是,所有散乱的点看起来像一个红色的'x' 假设我想要第三列值为-1时为红色'x',如果值为1则为蓝色'o' 。我该怎么做?

这是用plt.plot()实现的吗?

如果要更改颜色标记,则需要绘制多个散点图,每个标记至少一个。

import matplotlib.pyplot as plt
import numpy as np

a = np.array([[1, 2, -1],
              [1, 3, 1],
              [3, 2, -1],
              [5, 2, -1]])
mapping= {-1: ("red", "x"), 1: ("blue", "o")}

for c in np.unique(a[:,2]):
    d = a[a[:,2] == c]
    plt.scatter(d[:,0], d[:,1], c=mapping[c][0], marker=mapping[c][1])
    #plt.plot(d[:,0], d[:,1], color=mapping[c][0], marker=mapping[c][1])

plt.show()

在此输入图像描述

同样可以使用plot (请参阅代码中的注释行)。

遍历您的列表,并考虑每个子列表的第3项是颜色。 根据您拥有的数据对颜色进行属性化。 在这里,如果c == -1 ,我将值'r'赋值给c ,否则,它将等于'b' ,意思是蓝色

from matplotlib import pyplot as plt

arr = [[1, 2, -1], [1, 3, 1], [3, 2, -1], [5, 2, -1]]

for x, y, color in arr:
    c = 'r' if color == -1 else 'b'
    plt.plot(x, y, 'x' + c)
plt.show()

作为一名Python初学者,我最近遇到了类似的问题,对我而言,最好的解决方案是使用梦幻般的“ seaborn ”软件包。

诀窍是结合Pandas的DataFrame和Seaborn的“ FacetGrid ”对象,让他们完成所有工作。 以下是我为您的特定示例所做的工作:

  • 进口大熊猫和海鸟
  • 将数组转换为数据帧
  • 与matplotlib散点图一起创建一个seaborn facetgrid
  • 使用伟大的“Hue”参数来获得正确的颜色

这是我的代码:

导入必要的库

import seaborn as sns
import pandas as pd

创建Pandas DataFrame

a = pd.DataFrame(
    [[1, 2, -1],
    [1, 3, 1],
    [3, 2, -1],
    [5, 2, -1]])

a.columns=['A','B','C']

生成seaborn FacetGrid并使用Hue作为颜色

sns.FacetGrid(a, hue="C", size=2).map(plt.scatter, "A", "B").add_legend()
plt.show()

瞧!

带色调的散点图

显然这是一个简单的例子,但是使用真实数据,结果非常好且易于重现(见下文)

在此输入图像描述

PS:这是我在stackoverflow上的第一篇文章 - 感觉就像是某事的开始

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM