gpt4 book ai didi

python - 如何在Python中绘制非连续的自定义日期格式

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:26 24 4
gpt4 key购买 nike

我有一列具有自定义日期格式:YYYYWeekNo 例如201801, 201802...201851, 201852

当我的数据从 201752 跳转到 201801 时,就会出现问题,这会创建将数据视为 100 尺度的连续数据的绘图,因此图表会失真

有没有办法可以用不连续的 x 标签来解析这个图?

x = []
year = 2017
for i in range(104):
j = i+1
if j <= 52:
x.append(year * 100 + j)
else:
k = j - 52
x.append(((year+1) * 100 ) + k)


np.random.seed(1)
values = np.random.randint(low=0, high=5000, size=104)


df = pd.DataFrame.from_dict({'year_week': x, 'values': values})
df.set_index('year_week').plot(figsize=(15, 5))

enter image description here

最佳答案

您可以使用matplotlib example“破坏”轴。这将是定制版本:

import matplotlib.pylab as plt
import numpy as np

x = []
year = 2017
for i in range(104):
j = i+1
if j <= 52:
x.append(year * 100 + j)
else:
k = j - 52
x.append(((year+1) * 100 ) + k)
np.random.seed(1)
values = np.random.randint(low=0, high=5000, size=104)

df = pd.DataFrame.from_dict({'year_week': x, 'values': values})

f,(ax,ax2) = plt.subplots(1,2,sharey=True, facecolor='w', figsize=(10,10))

# plot the same data on both axes
ax.plot(df['year_week'], df['values'])
ax2.plot(df['year_week'], df['values'])

ax.set_xlim(201700,201753)
ax2.set_xlim(201800,201853)

# hide the spines between ax and ax2
ax.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
ax.yaxis.tick_left()
ax.tick_params()
ax2.yaxis.tick_right()

#this gets rid of scientific notation, so it's more readable
ax.ticklabel_format(useOffset=False)
ax2.ticklabel_format(useOffset=False)
plt.show()

输出:

enter image description here

此外,似乎有一个专门针对此特定问题的包:

Brokenaxes

关于python - 如何在Python中绘制非连续的自定义日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52829940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com