Skip to content Skip to sidebar Skip to footer

Matplotlib 3d Scatter Plot Date

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/10/2016', '16/10/2016', '17/10/2015', '15/10/

Solution 1:

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.mplot3dimportAxes3D
import matplotlib.pyplotas 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()

enter image description here

Solution 2:

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)

Post a Comment for "Matplotlib 3d Scatter Plot Date"