我试图用颜色和正确的标签来表示预测,以作为虹膜数据集的标记.这是我到目前为止的内容:
I'm trying to denote the predictions with a color and the correct labels as markers for the iris data set. Here is what I have so far:
from sklearn.mixture import GMM import pandas as pd from sklearn import datasets import matplotlib.pyplot as plt import itertools iris = datasets.load_iris() x = iris.data y = iris.target gmm = GMM(n_components=3).fit(x) labels = gmm.predict(x) fig, axes = plt.subplots(4, 4) Superman = iris.feature_names markers = ["o" , "s" , "D"] Mi=[] for i in range(150): Mi.append(markers[y[i]]) for i in range(4): for j in range(4): if(i != j): axes[i, j].scatter(x[:, i], x[:, j], c=labels, marker = Mi, s=40, cmap='viridis') else: axes[i,j].text(0.15, 0.3, Superman[i], fontsize = 8)我不确定为什么Colors会迭代,而Markers却不这样做,但是有没有办法为每个Marks分配一个特定的值,例如color?当我仅输入y的数值时,它也会失败.
I'm not sure why Colors iterate and markers do not, but is there a way to assign each marker a certain value like color? It also fails when I just enter the numeric values from y.
它返回的代码是:
无法识别的标记样式['o','o','o','o','o','o','o','o','o','o','o' ,"o","o","o","o","o","o","o","o","o","o","o","o","o','o','o','o','o','o','o','o','o','o','o','o','o' ,"o","o","o","o","o","o","o","o","o","o","o","o","o','o','s','s','s','s','s','s','s','s','s','s','s' ,"s","s","s","s","s","s","s","s","s","s","s","s","s','s','s','s','s','s','s','s','s','s','s','s','s' ,"s","s","s","s","s","s","s","s","s","s","s","s","s','s','D','D','D','D','D','D','D','D','D','D','D' ,"D","D","D","D","D","D","D","D","D","D","D","D","D','D','D','D','D','D','D','D','D','D','D','D','D' ,"D","D","D","D","D","D","D","D","D","D","D","D","D','D']
Unrecognized marker style ['o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D']
推荐答案
matplotlib不支持在单个散点图中使用多个标记.但是,在 github/matplotlib/matplotlib/issues/上有对此功能的要求11155
Using several markers in a single scatter is currently not a feature matplotlib supports. There is however a feature request for this at github/matplotlib/matplotlib/issues/11155
当然可以绘制多个散点图,每种标记类型一个. 我在上面的线程中建议的选项是一个不同的选项,该选项是在创建散点后设置标记:
It is of course possible to draw several scatters, one for each marker type. A different option is the one I proposed in the above thread, which is to set the markers after creating the scatter:
import numpy as np import matplotlib.pyplot as plt def mscatter(x,y,ax=None, m=None, **kw): import matplotlib.markers as mmarkers if not ax: ax=plt.gca() sc = ax.scatter(x,y,**kw) if (m is not None) and (len(m)==len(x)): paths = [] for marker in m: if isinstance(marker, mmarkers.MarkerStyle): marker_obj = marker else: marker_obj = mmarkers.MarkerStyle(marker) path = marker_obj.get_path().transformed( marker_obj.get_transform()) paths.append(path) sc.set_paths(paths) return sc N = 40 x, y, c = np.random.rand(3, N) s = np.random.randint(10, 220, size=N) m = np.repeat(["o", "s", "D", "*"], N/4) fig, ax = plt.subplots() scatter = mscatter(x, y, c=c, s=s, m=m, ax=ax) plt.show()
如果只有数字,而不是标记符号,则首先需要将数字映射到符号,并将符号列表提供给函数.
If you only have numbers, instead of marker symbols you would first need to map numbers to symbols and supply the list of symbols to the function.
更多推荐
重复地块中的标记
发布评论