The following solution (built on top of HYRY's answer) implements a mouse-over (pop-over) solution for data points in 3d charts. If you have many data points, the chart can get very cluttered if you annotate them all. M = rand(3,3) # m is an array of (x,y,z) coordinate tripletsĪx = fig.add_subplot(111, projection='3d')įor i in range(len(m)): # plot each point + it's index as text aboveĪx.text(x, y, z, '%s' % (label), size=20, zorder=1, color='k')Īnim = animation.FuncAnimation(fig, animate, frames=200, interval=50) Textcoords='offset points', ha='right',va='bottom') Segments =, xyzn) for s, t in edges]Īx.scatter(xn,yn,zn, marker='o', c = group, s = 64)Įdge_col = Line3DCollection(segments, lw=0.2)Īnnotate3D(ax, s=str(j), xyz=xyz_, fontsize=10, xytext=(-3,3), Using this function annotation tags can be added to Axes3d as in example bellow:įrom mpl_3d import Line3DCollection '''add anotation text s to to Axes3d ax''' Xs, ys, zs = proj_transform(xs3d, ys3d, zs3d, renderer.M)įurther, we can define the annotate3D() function: def annotate3D(ax, s, *args, **kwargs): Similarly Annotation3D class (inherited from Annotation) can be created: from mpl_3d import proj_transformĭef _init_(self, s, xyz, *args, **kwargs):Īnnotation._init_(self,s, xy=(0,0), *args, **kwargs) In the following posts, the plotting of 3D arrows in matplotlib is discussed. M=rand(3,3) # m is an array of (x,y,z) coordinate tripletsįor i in range(len(m)): #plot each point + it's index as text aboveĪx.scatter(m,m,m,color='b')Īx.text(m,m,m, '%s' % (str(i)), size=20, zorder=1, Maybe easier via ax.text(.): from matplotlib import pyplot
Label.update_positions()įig.canvas.mpl_connect('button_release_event', update_position) Textcoords = 'offset points', ha = 'right', va = 'bottom',ībox = dict(boxstyle = 'round,pad=0.5', fc = 'yellow', alpha = 0.5),Īrrowprops = dict(arrowstyle = '->', connectionstyle = 'arc3,rad=0')) # now try to get the display coordinates of the first point import pylabĪx = fig.add_subplot(111, projection = '3d') If you need interactive with the figure, you can recalculate the location when mouse released. Calculate the 2D position of the point, and use it create the annotation.