如何修改以下代码以添加图例?

# Code source: Gae"l Varoquaux

# License: BSD 3 clause

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

from sklearn import decomposition

from sklearn import datasets

np.random.seed(5)

centers = [[1, 1], [-1, -1], [1, -1]]

iris = datasets.load_iris()

X = iris.data#the floating point values

y = iris.target#unsigned integers specifying group

fig = plt.figure(1, figsize=(4, 3))

plt.clf()

ax = Axes3D(fig, rect=[0, 0, .95, 1], elev=48, azim=134)

plt.cla()

pca = decomposition.PCA(n_components=3)

pca.fit(X)

X = pca.transform(X)

for name, label in [('Setosa', 0), ('Versicolour', 1), ('Virginica', 2)]:

ax.text3D(X[y == label, 0].mean(),

X[y == label, 1].mean() + 1.5,

X[y == label, 2].mean(), name,

horizontalalignment='center',

bbox=dict(alpha=.5, edgecolor='w', facecolor='w'))

# Reorder the labels to have colors matching the cluster results

y = np.choose(y, [1, 2, 0]).astype(np.float)

ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap=plt.cm.spectral,

edgecolor='k')

ax.w_xaxis.set_ticklabels([])

ax.w_yaxis.set_ticklabels([])

ax.w_zaxis.set_ticklabels([])

plt.show()

解决方法:

另一个答案中存在一些问题,OP和回答者似乎都不清楚;因此,这不是一个完整的答案,而是现有答案的附录.

> 2.2版中的matplotlib已删除光谱色图,

使用Spectral或nipy_spectral或任何other valid colormap.

> matplotlib中的任何色彩映射范围都是0到1.如果使用该范围之外的任何值调用它,

它会给你最出色的颜色.要从色图中获取颜色,您需要对值进行标准化.

这是通过Normalize实例完成的.在这种情况下,这是分散的内部.

因此,使用sc = ax.scatter(…)然后使用sc.cmap(sc.norm(value))根据散点图中使用的相同映射获取值.

因此代码应该使用

[sc.cmap(sc.norm(i)) for i in [1, 2, 0]]

>传说不在图中.这个数字是4 x 3英寸(figsize =(4,3)).

轴占据宽度的95%(rect = [0,0,.95,1]).

对图例的调用将图例的右中心点置于轴宽度的1.7倍= 4 * 0.95 * 1.7 = 6.46英寸. (bbox_to_anchor =(1.7,0.5)).

来自我方的替代建议:使图形更大(figsize =(5.5,3)),使图例适合,使轴只占图形宽度的70%,这样你就有30%的图形.将图例的左侧放置在靠近轴边界的位置(bbox_to_anchor =(1.0,.5)).

你仍然可以看到包括jupyter笔记本中的图例在内的完整图形的原因是jupyter会将所有内容保存在画布中,即使它重叠并因此放大了图形.

总的来说,代码可能看起来像

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

import numpy as np; np.random.seed(5)

from sklearn import decomposition, datasets

centers = [[1, 1], [-1, -1], [1, -1]]

iris = datasets.load_iris()

X = iris.data #the floating point values

y = iris.target #unsigned integers specifying group

fig = plt.figure(figsize=(5.5, 3))

ax = Axes3D(fig, rect=[0, 0, .7, 1], elev=48, azim=134)

pca = decomposition.PCA(n_components=3)

pca.fit(X)

X = pca.transform(X)

labelTups = [('Setosa', 0), ('Versicolour', 1), ('Virginica', 2)]

for name, label in labelTups:

ax.text3D(X[y == label, 0].mean(),

X[y == label, 1].mean() + 1.5,

X[y == label, 2].mean(), name,

horizontalalignment='center',

bbox=dict(alpha=.5, edgecolor='w', facecolor='w'))

# Reorder the labels to have colors matching the cluster results

y = np.choose(y, [1, 2, 0]).astype(np.float)

sc = ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap="Spectral", edgecolor='k')

ax.w_xaxis.set_ticklabels([])

ax.w_yaxis.set_ticklabels([])

ax.w_zaxis.set_ticklabels([])

colors = [sc.cmap(sc.norm(i)) for i in [1, 2, 0]]

custom_lines = [plt.Line2D([],[], ls="", marker='.',

mec='k', mfc=c, mew=.1, ms=20) for c in colors]

ax.legend(custom_lines, [lt[0] for lt in labelTups],

loc='center left', bbox_to_anchor=(1.0, .5))

plt.show()

并生产

标签:python,scikit-learn,matplotlib

来源: https://codeday.me/bug/20190828/1747897.html

python 3d pca_python – matplotlib中的3D PCA:如何添加图例?相关推荐

  1. Python数据可视化matplotlib:第四回:文字图例尽眉目

    Python数据可视化matplotlib:第四回:文字图例尽眉目 1. Figure和Axes上的文本 大家可以看到有些论文或者博客上都有绘制的很漂亮的图,其中大部分都在图形绘制上进行一定的注释说明 ...

  2. python使用matplotlib可视化、为可视化图像添加图例(legend)、自定义图例的字体格式、字体大小、字体颜色等

    python使用matplotlib可视化.为可视化图像添加图例(legend).自定义图例的字体格式.字体大小.字体颜色等 目录

  3. python条形图颜色设置_python – 根据值在matplotlib中更改3D条形图中的条形颜色

    我在matplotlib中有一个3D条形图,总共有165个条形图,目前它非常混乱. 我想根据谨慎的z值更改条形的颜色:0,1,2. 我不确定如果我完全理解给定的答案,但我无法在这种情况下使其工作. 代 ...

  4. python colormap_python – 规范Matplotlib中Facecolors使用的Colormap

    首先,我试图在matplotlib中绘制球谐函数,因为它们在mayavi中可见: http://docs.enthought.com/mayavi/mayavi/auto/example_spheri ...

  5. scatter python cmap_使用matplotlib中scatter方法画散点图

    本文实例为大家分享了用matplotlib中scatter方法画散点图的具体代码,供大家参考,具体内容如下 1.最简单的绘制方式 绘制散点图是数据分析过程中的常见需求.python中最有名的画图工具是 ...

  6. 【Python画图】Matplotlib中fig、ax、plt的区别及其用法(入门)

    Matplotlib中fig.ax.plt的区别 1. fig.ax.plt三者的基本概念 2. fig方法的层级 3. 案例 3.1 fig和ax方法(面向对象) 3.2 plt方法 4. 总结 参 ...

  7. python热图_python – 使用matplotlib中的3D数据生成热图

    我有一个函数returnValuesAtTime,它返回三个lists-x_vals,y_vals和swe_vals.所有三个列表具有相同的长度,并且swe_vals中的每个元素对应于来自x_vals ...

  8. python 渲染3d模型_Python中的3D软件渲染

    我决定尝试在Python中使用Pygame进行实验,这样我就可以通过pixelarray绘制到屏幕上了.我决定按照this article来深入研究3D的数学 简而言之,我已经实现了所有功能.我构建了 ...

  9. python制作动态条形图-python – 动态更新matplotlib中的条形图

    我的Raspberry Pi附带了许多传感器;我使用TCP每秒两次将数据发送到我的PC.我想使用matplotlib连续绘制这些值. 我目前使用的方法似乎效率低下(我正在清理子图并每次重绘它)并且有一 ...

  10. python字典导入mongodb_Python中的有序字典:添加到MongoDB

    我有一个包含两个元素元组的列表,其中第一个元素是一个字符串(某个参数的名称),第二个元素是一个float(该参数的值).例如, thelist = [('costperunit', 200), ('p ...

最新文章

  1. C语言,分解质因数一个解法!_只愿与一人十指紧扣_新浪博客
  2. RDKit:运用RDKit计算USRCAT(形状相似性)
  3. Git简单基本操作指令集合
  4. 预充电电路工作原理_LED触摸调光台灯控制电路板的工作原理
  5. SQL中的条件语句case-when-then-else(就像C中的switch case语句)
  6. 【kafka系列】centos7系统安装kafka
  7. 使用方法 ros_大白菜的ROS笔记(8)(创建TF广播和监听,内容很多,细节满满)...
  8. K8S_Google工作笔记0005---搭建k8s集群(kubeadm方式)
  9. 【TensorFlow】TensorFlow快速入门
  10. 《机器学习实战(第二版)》学习记录
  11. 基于udp的服务器消息转发(群发)
  12. JS实现FlyBird
  13. 小米盒子 android 投影仪,小米盒子连接投影仪方法
  14. 腾达和小云无线路由中继(WISP)解决
  15. 【反演复习计划】【COGS2433】【bzoj3930,CQOI2015选数】爱蜜莉雅的冰魔法
  16. k8s-污点和容忍度
  17. 剑指offer:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
  18. java模拟抛物线_小tips:用java模拟小球做抛物线运动
  19. Python实现自由爆率抽奖小程序
  20. OpenCore 版本升级后清除NVRAM

热门文章

  1. 《设计模式修炼真经》15 — 模板方法模式
  2. 微信上的音乐怎么传到计算机上,如何把微信的歌传到电脑上
  3. 正则新能源车牌和汽车牌混合验证
  4. uchome开发入门
  5. SVG 绘制可交互的中国地图
  6. python游戏开发(贪吃蛇游戏、五子棋游戏、大球吃小球游戏)
  7. 可分离变量的微分方程
  8. Allatori混淆器的介绍以及使用方法
  9. Noi 十连测 Zbox loves meizi
  10. 【C语言】球从100米自由落下,每次落地后反跳回原高度的一半。当10次落地时,共经过多少米,第10次反弹多高。