时间上不连续,或有空缺的数据如何绘制折线图

一般情况下,数据部分缺失可以通过插值等手段补全,或者不处理空一小段对成图效果也影响不大,但是如果我拿出20年逐日数据,每年只有四五个月有数据,那阁下又将如何应对呢?【手动滑稽】

下面来看一下常规处理方法,先随便生成一个数据集,然后绘制折线图:

import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import pandas as pd
import numpy as np
# 生成20年的数据
times = []
for year in range(2001, 2021):
    start = pd.to_datetime(str(year) + '-05-01')
    end = pd.to_datetime(str(year) + '-09-30')
    times.append(pd.date_range(start, end))

# 构造随机数据  
data = [np.random.rand(len(t))*100 for t in times]

# 设置不同颜色 
colors = plt.get_cmap('Paired').colors *2

fig = plt.figure(figsize=(12, 8)) 
# 绘制折线图
for i in range(len(times)): 
    plt.plot(times[i], data[i], color=colors[i])

# 设置xtick标签  
ticks = [t[0] for t in times] 
plt.xticks(ticks, rotation=90) 

plt.show()

现在图片长下面这样,可以看到每年只有5到9月有数据,本来就不好看(随机生成的没办法),再空一大段直接没法看,下面咱就试试把空的月份去掉。

在这里插入图片描述

其实实现方法也很简单,只要把时间索引的格式转化为字符串,那么横轴就不会自动补全没有数据的时间索引了,修改后的代码如下:

import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import pandas as pd
import numpy as np
# 生成20年的数据
times = []
for year in range(2001, 2021):
    start = pd.to_datetime(str(year) + '-05-01')
    end = pd.to_datetime(str(year) + '-09-30')
    times.append(pd.date_range(start, end))
    
# 转换为字符串格式  
times_str = []
for t in times:
    times_str.append(t.strftime('%Y%m%d'))

# 构造随机数据  
data = [np.random.rand(len(t))*100 for t in times]

# 设置不同颜色 
colors = plt.get_cmap('Paired').colors *2

fig = plt.figure(figsize=(12, 8)) 
# 绘制折线图
for i in range(len(times_str)): 
    plt.plot(times_str[i], data[i], color=colors[i])

# 设置xtick标签  
ticks = [t[0] for t in times_str] 
plt.xticks(ticks, rotation=90) 

plt.show()

在这里插入图片描述
现在效果稍微好了那么一丝,收工。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值