pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

  • <i id='1jDPg'><tr id='1jDPg'><dt id='1jDPg'><q id='1jDPg'><span id='1jDPg'><b id='1jDPg'><form id='1jDPg'><ins id='1jDPg'></ins><ul id='1jDPg'></ul><sub id='1jDPg'></sub></form><legend id='1jDPg'></legend><bdo id='1jDPg'><pre id='1jDPg'><center id='1jDPg'></center></pre></bdo></b><th id='1jDPg'></th></span></q></dt></tr></i><div class="zhlj7pl" id='1jDPg'><tfoot id='1jDPg'></tfoot><dl id='1jDPg'><fieldset id='1jDPg'></fieldset></dl></div>
    <legend id='1jDPg'><style id='1jDPg'><dir id='1jDPg'><q id='1jDPg'></q></dir></style></legend>
  • <small id='1jDPg'></small><noframes id='1jDPg'>

    1. <tfoot id='1jDPg'></tfoot>

          <bdo id='1jDPg'></bdo><ul id='1jDPg'></ul>

      1. Matplotlib:以圖像為注釋的 3D 散點圖

        Matplotlib: 3D Scatter Plot with Images as Annotations(Matplotlib:以圖像為注釋的 3D 散點圖)

                <tbody id='TOoMv'></tbody>

              <legend id='TOoMv'><style id='TOoMv'><dir id='TOoMv'><q id='TOoMv'></q></dir></style></legend>

                <bdo id='TOoMv'></bdo><ul id='TOoMv'></ul>
              • <i id='TOoMv'><tr id='TOoMv'><dt id='TOoMv'><q id='TOoMv'><span id='TOoMv'><b id='TOoMv'><form id='TOoMv'><ins id='TOoMv'></ins><ul id='TOoMv'></ul><sub id='TOoMv'></sub></form><legend id='TOoMv'></legend><bdo id='TOoMv'><pre id='TOoMv'><center id='TOoMv'></center></pre></bdo></b><th id='TOoMv'></th></span></q></dt></tr></i><div class="prlz7fv" id='TOoMv'><tfoot id='TOoMv'></tfoot><dl id='TOoMv'><fieldset id='TOoMv'></fieldset></dl></div>
                <tfoot id='TOoMv'></tfoot>

                1. <small id='TOoMv'></small><noframes id='TOoMv'>

                  本文介紹了Matplotlib:以圖像為注釋的 3D 散點圖的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  我正在嘗試為包含從 0 到 9 的數字的數據集中的圖像的 tSNE 嵌入生成 3D 散點圖.我還想用數據集中的圖像注釋這些點.

                  在瀏覽了與該問題相關的現有資源后,我發現使用 matplotlib.offsetbox 可以輕松完成 2D 散點圖,如上所述

                  上述解決方案是靜態的.這意味著如果繪圖被旋轉或縮放,注釋將不再指向正確的位置.為了同步注釋,可以連接到繪圖事件并檢查限制或視角是否發生了變化,并相應地更新注釋坐標.(2019 年較新版本還需要將事件從頂部 2D 軸傳遞到底部 3D 軸;代碼已更新)

                  從 mpl_toolkits.mplot3d 導入 Axes3D從 mpl_toolkits.mplot3d 導入 proj3d將 matplotlib.pyplot 導入為 plt從 matplotlib 導入偏移框將 numpy 導入為 npxs = [1,1.5,2,2]ys = [1,2,3,1]zs = [0,1,2,0]c = ["b","r","g","黃金"]無花果 = plt.figure()ax = fig.add_subplot(111, projection=Axes3D.name)ax.scatter(xs, ys, zs, c=c, marker="o")# 創建一個虛擬軸來放置注釋ax2 = fig.add_subplot(111,frame_on=False)ax2.axis("關閉")ax2.axis([0,1,0,1])類 ImageAnnotations3D():def __init__(self, xyz, imgs, ax3d,ax2d):自我.xyz = xyzself.imgs = imgsself.ax3d = ax3dself.ax2d = ax2dself.annot = []對于 s,im in zip(self.xyz, self.imgs):x,y = self.proj(s)self.annot.append(self.image(im,[x,y]))self.lim = self.ax3d.get_w_lims()self.rot = self.ax3d.get_proj()self.cid = self.ax3d.figure.canvas.mpl_connect("draw_event",self.update)self.funcmap = {button_press_event":self.ax3d._button_press,motion_notify_event":self.ax3d._on_move,button_release_event":self.ax3d._button_release}self.cfs = [self.ax3d.figure.canvas.mpl_connect(kind, self.cb) 對于 self.funcmap.keys() 中的種類]def cb(自我,事件):event.inaxes = self.ax3dself.funcmap[event.name](事件)定義項目(自我,X):""" 從軸 ax1 中的一個 3D 點,在 ax2 """ 中計算二維位置x,y,z = Xx2, y2, _ = proj3d.proj_transform(x,y,z, self.ax3d.get_proj())tr = self.ax3d.transData.transform((x2, y2))返回 self.ax2d.transData.inverted().transform(tr)def 圖像(自我,arr,xy):""" 將圖像 (arr) 作為注釋放置在 xy 位置 """im = offsetbox.OffsetImage(arr, zoom=2)im.image.axes = 斧頭ab = offsetbox.AnnotationBbox(im, xy, xybox=(-30., 30.),xycoords='data', boxcoords="offset points",墊=0.3,箭頭道具=dict(箭頭樣式=->"))self.ax2d.add_artist(ab)返回ab定義更新(自我,事件):如果 np.any(self.ax3d.get_w_lims() != self.lim) 或 
                  p.any(self.ax3d.get_proj()!= self.rot):self.lim = self.ax3d.get_w_lims()self.rot = self.ax3d.get_proj()對于 s,ab in zip(self.xyz, self.annot):ab.xy = self.proj(s)imgs = [np.random.rand(10,10) for i in range(len(xs))]ia = ImageAnnotations3D(np.c_[xs,ys,zs],imgs,ax, ax2 )ax.set_xlabel('X 標簽')ax.set_ylabel('Y 標簽')ax.set_zlabel('Z 標簽')plt.show()

                  I am trying to generate a 3D scatter plot for tSNE embeddings of images from a dataset containing digits from 0 to 9. I would also like to annotate the points with the images from the dataset.

                  After going through existing resources pertaining the issue, I found that it can be done easily for 2D scatter plot with matplotlib.offsetbox as mentioned here.

                  There is also a question on SO relating to 3D annotation but with text only. Does anyone know how to annotate with image instead of text ?

                  Thanks !

                  解決方案

                  The matplotlib.offsetbox does not work in 3D. As a workaround one may use a 2D axes overlaying the 3D plot and place the image annotation to that 2D axes at the position which corresponds to the position in the 3D axes.

                  To calculate the coordinates of those positions, one may refer to How to transform 3d data units to display units with matplotlib?. Then one may use the inverse transform of those display coordinates to obtain the new coordinates in the overlay axes.

                  from mpl_toolkits.mplot3d import Axes3D
                  from mpl_toolkits.mplot3d import proj3d
                  import matplotlib.pyplot as plt
                  from matplotlib import offsetbox
                  import numpy as np
                  
                  xs = [1,1.5,2,2]
                  ys = [1,2,3,1]
                  zs = [0,1,2,0]
                  
                  c = ["b","r","g","gold"]
                  
                  fig = plt.figure()
                  ax = fig.add_subplot(111, projection=Axes3D.name)
                  
                  ax.scatter(xs, ys, zs, c=c, marker="o")
                  
                  # Create a dummy axes to place annotations to
                  ax2 = fig.add_subplot(111,frame_on=False) 
                  ax2.axis("off")
                  ax2.axis([0,1,0,1])
                  
                  
                  def proj(X, ax1, ax2):
                      """ From a 3D point in axes ax1, 
                          calculate position in 2D in ax2 """
                      x,y,z = X
                      x2, y2, _ = proj3d.proj_transform(x,y,z, ax1.get_proj())
                      return ax2.transData.inverted().transform(ax1.transData.transform((x2, y2)))
                  
                  def image(ax,arr,xy):
                      """ Place an image (arr) as annotation at position xy """
                      im = offsetbox.OffsetImage(arr, zoom=2)
                      im.image.axes = ax
                      ab = offsetbox.AnnotationBbox(im, xy, xybox=(-30., 30.),
                                          xycoords='data', boxcoords="offset points",
                                          pad=0.3, arrowprops=dict(arrowstyle="->"))
                      ax.add_artist(ab)
                  
                  
                  for s in zip(xs,ys,zs):
                      x,y = proj(s, ax, ax2)
                      image(ax2,np.random.rand(10,10),[x,y])
                  
                  ax.set_xlabel('X Label')
                  ax.set_ylabel('Y Label')
                  ax.set_zlabel('Z Label')
                  plt.show()
                  

                  The above solution is static. This means if the plot is rotated or zoomed, the annotations will not point to the correct locations any more. In order to synchronize the annoations, one may connect to the draw event and check if either the limits or the viewing angles have changed and update the annotation coordinates accordingly. (Edit in 2019: Newer versions also require to pass on the events from the top 2D axes to the bottom 3D axes; code updated)

                  from mpl_toolkits.mplot3d import Axes3D
                  from mpl_toolkits.mplot3d import proj3d
                  import matplotlib.pyplot as plt
                  from matplotlib import offsetbox
                  import numpy as np
                  
                  xs = [1,1.5,2,2]
                  ys = [1,2,3,1]
                  zs = [0,1,2,0]
                  c = ["b","r","g","gold"]
                  
                  
                  fig = plt.figure()
                  ax = fig.add_subplot(111, projection=Axes3D.name)
                  
                  ax.scatter(xs, ys, zs, c=c, marker="o")
                  
                  # Create a dummy axes to place annotations to
                  ax2 = fig.add_subplot(111,frame_on=False) 
                  ax2.axis("off")
                  ax2.axis([0,1,0,1])
                  
                  class ImageAnnotations3D():
                      def __init__(self, xyz, imgs, ax3d,ax2d):
                          self.xyz = xyz
                          self.imgs = imgs
                          self.ax3d = ax3d
                          self.ax2d = ax2d
                          self.annot = []
                          for s,im in zip(self.xyz, self.imgs):
                              x,y = self.proj(s)
                              self.annot.append(self.image(im,[x,y]))
                          self.lim = self.ax3d.get_w_lims()
                          self.rot = self.ax3d.get_proj()
                          self.cid = self.ax3d.figure.canvas.mpl_connect("draw_event",self.update)
                  
                          self.funcmap = {"button_press_event" : self.ax3d._button_press,
                                          "motion_notify_event" : self.ax3d._on_move,
                                          "button_release_event" : self.ax3d._button_release}
                  
                          self.cfs = [self.ax3d.figure.canvas.mpl_connect(kind, self.cb) 
                                          for kind in self.funcmap.keys()]
                  
                      def cb(self, event):
                          event.inaxes = self.ax3d
                          self.funcmap[event.name](event)
                  
                      def proj(self, X):
                          """ From a 3D point in axes ax1, 
                              calculate position in 2D in ax2 """
                          x,y,z = X
                          x2, y2, _ = proj3d.proj_transform(x,y,z, self.ax3d.get_proj())
                          tr = self.ax3d.transData.transform((x2, y2))
                          return self.ax2d.transData.inverted().transform(tr)
                  
                      def image(self,arr,xy):
                          """ Place an image (arr) as annotation at position xy """
                          im = offsetbox.OffsetImage(arr, zoom=2)
                          im.image.axes = ax
                          ab = offsetbox.AnnotationBbox(im, xy, xybox=(-30., 30.),
                                              xycoords='data', boxcoords="offset points",
                                              pad=0.3, arrowprops=dict(arrowstyle="->"))
                          self.ax2d.add_artist(ab)
                          return ab
                  
                      def update(self,event):
                          if np.any(self.ax3d.get_w_lims() != self.lim) or 
                                          np.any(self.ax3d.get_proj() != self.rot):
                              self.lim = self.ax3d.get_w_lims()
                              self.rot = self.ax3d.get_proj()
                              for s,ab in zip(self.xyz, self.annot):
                                  ab.xy = self.proj(s)
                  
                  
                  imgs = [np.random.rand(10,10) for i in range(len(xs))]
                  ia = ImageAnnotations3D(np.c_[xs,ys,zs],imgs,ax, ax2 )
                  
                  ax.set_xlabel('X Label')
                  ax.set_ylabel('Y Label')
                  ax.set_zlabel('Z Label')
                  plt.show()
                  

                  這篇關于Matplotlib:以圖像為注釋的 3D 散點圖的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                  【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  python: Two modules and classes with the same name under different packages(python:不同包下同名的兩個模塊和類)
                  Configuring Python to use additional locations for site-packages(配置 Python 以使用站點包的其他位置)
                  How to structure python packages without repeating top level name for import(如何在不重復導入頂級名稱的情況下構造python包)
                  Install python packages on OpenShift(在 OpenShift 上安裝 python 包)
                  How to refresh sys.path?(如何刷新 sys.path?)
                  Distribute a Python package with a compiled dynamic shared library(分發帶有已編譯動態共享庫的 Python 包)
                  <tfoot id='YKNFh'></tfoot>

                  • <small id='YKNFh'></small><noframes id='YKNFh'>

                          <tbody id='YKNFh'></tbody>
                      1. <legend id='YKNFh'><style id='YKNFh'><dir id='YKNFh'><q id='YKNFh'></q></dir></style></legend>

                          <i id='YKNFh'><tr id='YKNFh'><dt id='YKNFh'><q id='YKNFh'><span id='YKNFh'><b id='YKNFh'><form id='YKNFh'><ins id='YKNFh'></ins><ul id='YKNFh'></ul><sub id='YKNFh'></sub></form><legend id='YKNFh'></legend><bdo id='YKNFh'><pre id='YKNFh'><center id='YKNFh'></center></pre></bdo></b><th id='YKNFh'></th></span></q></dt></tr></i><div class="tvrpnzx" id='YKNFh'><tfoot id='YKNFh'></tfoot><dl id='YKNFh'><fieldset id='YKNFh'></fieldset></dl></div>
                            <bdo id='YKNFh'></bdo><ul id='YKNFh'></ul>

                          • 主站蜘蛛池模板: 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 | 数字展示在线_数字展示行业门户网站 | 煤粉取样器-射油器-便携式等速飞灰取样器-连灵动 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 玻璃钢格栅盖板|玻璃钢盖板|玻璃钢格栅板|树篦子-长沙川皖玻璃钢制品有限公司 | 盘古网络技术有限公司| 河北中仪伟创试验仪器有限公司是专业生产沥青,土工,水泥,混凝土等试验仪器的厂家,咨询电话:13373070969 | 电竞学校_电子竞技培训学校学院-梦竞未来电竞学校官网 | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 混合气体腐蚀试验箱_盐雾/硫化氢/气体腐蚀试验箱厂家-北京中科博达 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | 2025世界机器人大会_IC China_半导体展_集成电路博览会_智能制造展览网 | 青海电动密集架_智能密集架_密集架价格-盛隆柜业青海档案密集架厂家 | DWS物流设备_扫码称重量方一体机_快递包裹分拣机_广东高臻智能装备有限公司 | 篮球架_乒乓球台_足球门_校园_竞技体育器材_厂家_价格-沧州浩然体育器材有限公司 | 净化车间装修_合肥厂房无尘室设计_合肥工厂洁净工程装修公司-安徽盛世和居装饰 | 不锈钢散热器,冷却翅片管散热器厂家-无锡市烨晟化工装备科技有限公司 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 大型果蔬切片机-水果冬瓜削皮机-洗菜机切菜机-肇庆市凤翔餐饮设备有限公司 | bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 钢托盘,铁托盘,钢制托盘,镀锌托盘,饲料托盘,钢托盘制造商-南京飞天金属13260753852 | 中细软知识产权_专业知识产权解决方案提供商 | 河南凯邦机械制造有限公司 | 长春网站建设,五合一网站设计制作,免费优化推广-长春网站建设 | 土壤有机碳消解器-石油|表层油类分析采水器-青岛溯源环保设备有限公司 | 全球化工设备网—化工设备,化工机械,制药设备,环保设备的专业网络市场。 | 即用型透析袋,透析袋夹子,药敏纸片,L型涂布棒-上海桥星贸易有限公司 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 创绿家招商加盟网-除甲醛加盟-甲醛治理加盟-室内除甲醛加盟-创绿家招商官网 | 自动气象站_气象站监测设备_全自动气象站设备_雨量监测站-山东风途物联网 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 手表腕表维修保养鉴定售后服务中心网点 - 名表维修保养 | 智慧食堂_食堂管理系统_食堂订餐_食堂消费系统—客易捷 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 高中学习网-高考生信息学习必备平台| 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 |