pythonmatplotlibmplot3dmatplotlib-3d

Connecting two points in a 3D scatter plot


In the code below, how do I create lines connecting each pair of scatter plots (i.e. linking the green circle to the yellow arrowhead) created by the two lines of code towards the end just before the .show() instruction?

import matplotlib.pyplot
from mpl_toolkits.mplot3d import Axes3D

dates       = [20020514, 20020515, 20020516, 20020517, 20020520]
highs       = [1135, 1158, 1152, 1158, 1163]
lows        = [1257, 1253, 1259, 1264, 1252]
upperLimits = [1125.0, 1125.0, 1093.75, 1125.0, 1125.0]
lowerLimits = [1250.0, 1250.0, 1156.25, 1250.0, 1250.0]

zaxisvalues0= [0, 0, 0, 0, 0]
zaxisvalues1= [1, 1, 1, 1, 1]
zaxisvalues2= [2, 2, 2, 2, 2]

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

ax.plot(dates, zaxisvalues1, lowerLimits, color = 'b')
ax.plot(dates, zaxisvalues2, upperLimits, color = 'r')

ax.scatter(dates, zaxisvalues0, highs, color = 'g', marker = "o")
ax.scatter(dates, zaxisvalues0, lows, color = 'y', marker = "^")

matplotlib.pyplot.show()

Solution

  • Draw a line segment between those points:

    import matplotlib.pyplot
    from mpl_toolkits.mplot3d import Axes3D
    
    dates       = [20020514, 20020515, 20020516, 20020517, 20020520]
    highs       = [1135, 1158, 1152, 1158, 1163]
    lows        = [1257, 1253, 1259, 1264, 1252]
    upperLimits = [1125.0, 1125.0, 1093.75, 1125.0, 1125.0]
    lowerLimits = [1250.0, 1250.0, 1156.25, 1250.0, 1250.0]
    
    zaxisvalues0= [0, 0, 0, 0, 0]
    zaxisvalues1= [1, 1, 1, 1, 1]
    zaxisvalues2= [2, 2, 2, 2, 2]
    
    fig = matplotlib.pyplot.figure()
    ax  = fig.add_subplot(111, projection = '3d')
    
    ax.plot(dates, zaxisvalues1, lowerLimits, color = 'b')
    ax.plot(dates, zaxisvalues2, upperLimits, color = 'r')
    
    for i,j,k,h in zip(dates,zaxisvalues0,lows,highs):
        ax.plot([i,i],[j,j],[k,h],color = 'g')
    
    ax.scatter(dates, zaxisvalues0, highs, color = 'g', marker = "o")
    ax.scatter(dates, zaxisvalues0, lows, color = 'y', marker = "^")
    
    matplotlib.pyplot.show()
    

    Produces:

    enter image description here