简体   繁体   中英

Axes3D.text() Annotate 3D Scatter Plot

Can't get the 3D text working to annotate the scatter plot points.

Tried Axes3D.text, plt.text but keep getting 'missing required positional argument 's'. How do you annotate in 3D in a loop?

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
import pandas as pd
import numpy as np

df = pd.read_csv (r'J:\Temp\Michael\Python\9785.csv')

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

#Scatter plot
for i in df.index:
    x = df.at[i,'x']
    y = df.at[i,'y']
    z = df.at[i,'h']
    ax.scatter(xs=x, ys=y, zs=z, s=20,color='red',marker='^')
    label = df.at[i,'to']
    Axes3D.text(x+0.8,y+0.8,z+0.8, label, zdir=x)

TypeError: text() missing 1 required positional argument: 's'

Changing: ax = fig.add_subplot(111, projection='3d')

to: ax = fig.gca(projection='3d')

solved the problem. Used ax.text.

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
import pandas as pd
import numpy as np

df = pd.read_csv (r'J:\Temp\Michael\Python\9785.csv')

fig = plt.figure()
ax = fig.gca(projection='3d')

#Scatter plot
for i in df.index:
    df.set_index('to')
    x = df.at[i,'x']
    y = df.at[i,'y']
    z = df.at[i,'h']
    ax.scatter(xs=x, ys=y, zs=z, s=20,color='red',marker='^')
    ax.text(x+0.8,y+0.8,z+0.8, df.at[i,'to'], size=10, zorder=1)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM