Search code examples
pythonmatplotlibplotridgeline-plot

Set x axis labels for joyplot


I have written the code below to visualise a joyplot. When trying to change the x axis labels using axes.set_xticks, I get the error: AttributeError: 'list' object has no attribute 'set_xticks'

import joypy
import pandas as pd
from matplotlib import pyplot as plt

data = pd.DataFrame.from_records([['twitter', 1],
 ['twitter', 6],
 ['wikipedia', 1],
 ['wikipedia', 3],
 ['indymedia', 1],
 ['indymedia', 9]], columns=['platform','day'])

# Get number of days in the dataset
numdays = max(set(data['day'].tolist()))

# Generate date strings from a manually set start date
start_date = "2010-01-01"
dates = pd.date_range(start_date, periods=numdays)
dates = [str(date)[:-9] for date in dates]

fig, axes = joypy.joyplot(data,by="platform")
axes.set_xticks(range(numdays)); axes.set_xticklabels(dates)

plt.show()

The expected output should look something like the following but with the dates from dates as ticklabels.

enter image description here


Solution

  • Since joypy.joyplot(..) returns a tuple of figure, axes and axes should be list of axes, you probably want to set the labels for the last axes,

    axes[-1].set_xticks(range(numdays))
    axes[-1].set_xticklabels(dates)