matplotlib 3d scatter plot date

后端 未结 2 432
长情又很酷
长情又很酷 2021-01-15 16:56

I have a list of dates in format 15/10/2017

I have tried the following

from matplotlib import pyplot
import pandas as pd

dates = [\'15/         


        
相关标签:
2条回答
  • 2021-01-15 17:41

    Scatter expects a number. So you can convert your dates to as number as follows:

    y = [ (d-min(dates_formatted)).days for d in dates_formatted]
    

    Now you can plot the data as

    pyplot.scatter(x, y)
    

    For a 3D plot, you can try something like this ...

    import pandas as pd
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    
    plt.ion()
    x = [1,2,3,4]
    z = [5,6,7,8]
    dates = ['15/10/2016', '16/10/2016', "17/10/2015", "15/10/2014"]
    dates_formatted = [pd.to_datetime(d) for d in dates]
    
    y = [ (d-min(dates_formatted)).days for d in dates_formatted]
    
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    plt.scatter(x, y, z)
    

    The y axis in now in days. You can change that by finding the date string, and changing it back ...

    dt = [ pd.Timedelta(d) + min(dates_formatted)  for d in  ax.get_yticks()]
    

    Convert these into strings ...

    dtStr = [d.isoformat() for d in dt]
    

    And put them back

    ax.set_yticklabels(dtStr)
    
    0 讨论(0)
  • 2021-01-15 17:51

    It's not always trivial to tell matplotlib how to translate strings into a coordinate system. Why not simply set custom tick labels for the axes?

    import pandas as pd
    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    
    fig = plt.figure('scatter dates')
    ax = fig.add_subplot(111, projection='3d')
    dates = ['15/10/2016', '16/10/2016', "17/10/2015", "15/10/2014"]
    dates_formatted = [pd.to_datetime(d) for d in dates ]
    x = [1,2,3,4]
    y = [9,10,11,12]
    z = [5,6,7,8]
    
    ax.scatter(x, y, z)
    ax.xaxis.set_ticks(x)
    ax.xaxis.set_ticklabels(dates_formatted)
    plt.show()
    

    0 讨论(0)
提交回复
热议问题