简体   繁体   中英

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.

在此处输入图片说明

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)

To make date plots with python matplotlib do you should use plot_date function.

fig, ax = plt.subplots()
ax.plot_date(dates, data1, '-')

I put the complete example in pastebin, follow the link: https://pastebin.com/sVPUZaeM

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
from random import randrange, random
from datetime import datetime

#generate date list
start_date = np.datetime64('2010-01-01').astype(datetime)
numdays = 10
dates = pd.date_range(start_date, periods=numdays)

#Generate data example
data1 = [(random()+idx)**1.2 for idx in range(len(dates))]
data2 = [(random()+idx)**1.5 for idx in range(len(dates))]

#plot
fig, ax = plt.subplots()
ax.plot_date(dates, data1, '-')
ax.plot_date(dates, data2, '-')

#set the label for x and y and title
plt.title('Matplot lib dates wc example')
plt.xlabel('Dates')
plt.ylabel('Random values example')

#date format
ax.fmt_xdata = DateFormatter('%Y%m%d')
ax.grid(True)
fig.autofmt_xdate()

plt.show()

Python version tested successfully: 2.7.12
This code generates: this follow plot

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