4

我有一个数据集,我希望用 matplotlib 绘制为散点图,以及一个大小相同的向量,用于对数据点进行分类和标记(离散地,例如从 0 到 3)。我想为不同的标签使用不同的标记(例如,'x' 代表 0,'o' 代表 1 等等)。我怎样才能优雅地解决这个问题?我很确定我只是错过了一些东西,但并没有真正找到它,而且我幼稚的方法到目前为止都失败了......

4

2 回答 2

8

像这样遍历所有标记怎么样:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(100)
y = np.random.rand(100)
category = np.random.random_integers(0, 3, 100)

markers = ['s', 'o', 'h', '+']
for k, m in enumerate(markers):
    i = (category == k)
    plt.scatter(x[i], y[i], marker=m)

plt.show()
于 2013-05-27T13:54:43.407 回答
1

Matplotlib 不接受每个图的不同标记。

但是,对于大型数据集,一个不那么冗长且更健壮的解决方案是使用pandasandseaborn库:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

x = [48.959, 49.758, 49.887, 50.593, 50.683 ]
y = [122.310, 121.29, 120.525, 120.252, 119.509]
z = [136.993, 133.128, 143.710, 129.088, 139.860]
kmean = np.array([0, 1, 0, 2, 2])

df = pd.DataFrame({'x':x,'y':y,'z':z, 'km_z':kmean})
sns.scatterplot(data = df, x='x', y='y', hue='km_z', style='km_z')

产生以下输出

在此处输入图像描述

此外,您可以使用该pandas.cut函数来绘制 bin(这是我经常需要生成的图表,我可以在其中使用第三个连续值作为参数)。使用方法是:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
x = [48.959, 49.758, 49.887, 50.593, 50.683 ]
y = [122.310, 121.29, 120.525, 120.252, 119.509]
z = [136.993, 133.128, 143.710, 129.088, 139.860]

df = pd.DataFrame({'x':x,'y':y,'z':z})
df['bins'] = pd.cut(df.z, bins=3)
sns.scatterplot(data = df, x='x', y='y', hue='bins', style='bins')

它产生以下示例:

在此处输入图像描述


我使用后一种方法来生成如下图:

在此处输入图像描述

于 2021-08-06T08:18:51.287 回答