更改(日期)X轴刻度频率

2024-09-30 18:18:01 发布

您现在位置:Python中文网/ 问答频道 /正文

连续几个小时,我一直试图改变x轴的滴答频率。我希望每个数据点都有一个对应的记号(或者每隔一个,至少每三个)。在

我的图表应该显示销售数量kolicina和折扣百分比popust (%),每个季度的图表(为了简单起见,我只使用一个季节图)。在

这是我的代码:

#Libraries
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

#Import data
data = pd.read_excel(r'C:\Users\dagejev\Downloads\export_20190719.xls', index_col=None)

#Select relevant data
data = data[['dan_id', 'sezona_id', 'popust_retka', 'kolicina', 'maloprodajna_cijena']]

#Add new column
data['popust (%)'] = data['popust_retka'] / (data['maloprodajna_cijena'] * data['kolicina'])

#Modifying data
data2 = data.reset_index().groupby(['sezona_id','dan_id'], as_index=True).agg({'kolicina' : 'sum', 'popust (%)' : 'mean'})

#x-axis data creation
xaxis = data2.reset_index().set_index('sezona_id')['dan_id']
## Convert from integer to datetime
xaxis.apply(str)
xaxis = xaxis.apply(pd.to_datetime, format='%Y%m%d')

#Clear figure just in case
plt.clf()

#Main: plotting
plt.figure()

fig, ax1 = plt.subplots()

main_color = 'black'
season_name = data2.reset_index()['sezona_id'].unique()[3]

#Plotting axis and visual adjustments
ax1.plot(xaxis.loc[season_name], data2.loc[season_name,'kolicina'], 'k-')
ax1.set_ylabel('količina', color=main_color)
ax1.tick_params('y', colors=main_color)
ax1.tick_params('x', colors=main_color) #x-axis ticks
ax1.xaxis_date()
ax1.set_title(season_name, color=main_color)

#Failed attempt at spacing ticks no. 1 - runs w/ no change
'''xi = [j for j in range(0, len(xaxis.loc[season_name]))]
plt.xticks(xi, xaxis.loc[season_name])'''

#Failed attempt at spacing ticks no. 2 - runs w/ no change
'''tick_spacing = 1
ax1.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))'''

# I also tried changing the index of the data (`kolicina` and `popust (%)`) 
# series to datetime format just like this:
#  `data2.reset_index()['dan_id'] = xaxis
# which resulted in 
# `ValueError: cannot reindex a duplicate axis` 

#Twin axis
x1 = ax1.twinx()
x1.plot(xaxis.loc[season_name], data2.loc[season_name,'popust (%)'], 'r-')
x1.set_ylabel('popust', color='r')
x1.tick_params('y', colors='r')

#Visual adjustments
fig.subplots_adjust(right=1.5, top=1.0, hspace=0.5)
fig.autofmt_xdate(rotation=33)
fig.patch.set_facecolor('xkcd:white')

plt.show()

导致一些不相关的信息:

^{pr2}$

还有情节:

enter image description here

非常感谢帮助。在


Tags: nameiddataindexaspltloccolor