解决Python Matplotlib绘图数据点位置错乱问题


Posted in Python onMay 16, 2020

在绘制正负样本在各个特征维度上的CDF(累积分布)图时出现了以下问题:

解决Python Matplotlib绘图数据点位置错乱问题

问题具体表现为:

1.几个负样本的数据点位置倒错

2.X轴刻度变成了乱七八糟一团鬼东西

最终解决办法

造成上述情况的原因其实是由于输入matplotlib.plot()函数的数据x_data和y_data从CSV文件中直接导入后格式为string,因此才会导致所有数据点的x坐标都被直接刻在了x轴上,且由于坐标数据格式错误,部分点也就表现为“乱点”。解决办法就是导入x,y数据后先将其转化为float型数据,然后输入plot()函数,问题即解决。

解决Python Matplotlib绘图数据点位置错乱问题

补充知识:matplotlib如何在绘制时间序列时跳过无数据的区间

其实官方文档里就提供了方法,这里简单的翻译并记录一下.

11.1.9 Skip dates where there is no data
When plotting time series, e.g., financial time series, one often wants to leave out days on which there is no data, e.g., weekends.
By passing in dates on the x-xaxis, you get large horizontal gaps on periods when there is not data.

The solution is to pass in some proxy x-data, e.g., evenly sampled indices, and then use a custom formatter to format these as dates.
The example below shows how to use an ‘index formatter' to achieve the desired plot:

解决方案是通过传递x轴数据的代理,比如下标,

然后通过自定义的'formatter'去取到相对应的时间信息

manual内示例代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib.ticker as ticker

#读数据
r = mlab.csv2rec('../data/aapl.csv')
r.sort()
r = r[-30:] # get the last 30 days
N = len(r)
ind = np.arange(N) # the evenly spaced plot indices
def format_date(x, pos=None):
 #保证下标不越界,很重要,越界会导致最终plot坐标轴label无显示
 thisind = np.clip(int(x+0.5), 0, N-1)
 return r.date[thisind].strftime('%Y-%m-%d')

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(ind, r.adj_close, 'o-')
ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
fig.autofmt_xdate()
plt.show()

示例:

同样一段数据上为原始,下为去掉无数据间隔区间

解决Python Matplotlib绘图数据点位置错乱问题

import pandas as PD
import numpy as NP
import matplotlib.pyplot as PLT
import matplotlib.ticker as MTK

file = r'vix_series.csv'
df = PD.read_csv(file, parse_dates=[0, 2])
#用下标代理原始时间戳数据
idx_pxy = NP.arange(df.shape[0])
#下标-时间转换func
def x_fmt_func(x, pos=None):
 idx = NP.clip(int(x+0.5), 0, df.shape[0]-1)
 return df['datetime'].iat[idx]
#绘图流程
def decorateAx(ax, xs, ys, x_func):
 ax.plot(xs, ys, color="green", linewidth=1, linestyle="-")
 ax.plot(ax.get_xlim(), [0,0], color="blue", 
   linewidth=0.5, linestyle="--")
 if x_func:
  #set数据代理func
  ax.xaxis.set_major_formatter(MTK.FuncFormatter(x_func))
 ax.grid(True)
 return

fig = PLT.figure()
ax1 = fig.add_subplot(2,1,1)
ax2 = fig.add_subplot(2,1,2)
decorateAx(ax1, df['datetime'], df['vix_all'], None)
decorateAx(ax2, idx_pxy, df['vix_all'], x_fmt_func)
#优化label显示,非必须
fig.autofmt_xdate()
PLT.show()

很多时候乱翻google还不如好好通读官方manual…

以上这篇解决Python Matplotlib绘图数据点位置错乱问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
使用Python将数组的元素导出到变量中(unpacking)
Oct 27 Python
python开发简易版在线音乐播放器
Mar 03 Python
解决PyCharm中光标变粗的问题
Aug 05 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
Python实现霍夫圆和椭圆变换代码详解
Jan 12 Python
python去除文件中重复的行实例
Jun 29 Python
python入门:这篇文章带你直接学会python
Sep 14 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 Python
python爬虫泛滥的解决方法详解
Nov 25 Python
详解Python遍历列表时删除元素的正确做法
Jan 07 Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 #Python
解决echarts中饼图标签重叠的问题
May 16 #Python
实现ECharts双Y轴左右刻度线一致的例子
May 16 #Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 #Python
Python如何使用PIL Image制作GIF图片
May 16 #Python
pyecharts调整图例与各板块的位置间距实例
May 16 #Python
通过Python实现一个简单的html页面
May 16 #Python
You might like
杏林同学录(二)
2006/10/09 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
JS 自动安装exe程序
2008/11/30 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
2017/01/20 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
[02:36]DOTA2混沌骑士 英雄基础教程
2013/11/26 DOTA
Python  连接字符串(join %)
2008/09/06 Python
初步讲解Python中的元组概念
2015/05/21 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
基于Python对数据shape的常见操作详解
2018/12/25 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
Python求解正态分布置信区间教程
2019/11/20 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
python 5个顶级异步框架推荐
2020/09/09 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
转党组织关系介绍信
2014/01/08 职场文书
军训自我鉴定
2014/01/22 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
研修心得体会
2014/09/04 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
安全生产标语大全
2014/10/06 职场文书
单位病假条范文
2015/08/17 职场文书
高中化学教学反思
2016/02/22 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
详解JavaScript中Arguments对象用途
2021/08/30 Javascript