解决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 相关文章推荐
python使用cookie库操保存cookie详解
Mar 03 Python
python格式化字符串实例总结
Sep 28 Python
python获取文件扩展名的方法
Jul 06 Python
Python生成数字图片代码分享
Oct 31 Python
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
Python使用pyautocad+openpyxl处理cad文件示例
Jul 11 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
python实现井字棋小游戏
Mar 04 Python
Python爬虫爬取电影票房数据及图表展示操作示例
Mar 27 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 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
海贼王:最美的悬赏令!
2020/03/02 日漫
世界上第一台立体声收音机
2021/03/01 无线电
NT IIS下用ODBC连接数据库
2006/10/09 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
2012/07/17 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
PHP中->和=>的含义及使用示例解析
2020/08/06 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
js left,right,mid函数
2008/06/10 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
学习十八大精神心得体会
2013/12/31 职场文书
高中生期末评语
2014/01/28 职场文书
会议欢迎标语
2014/06/30 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
跳高加油稿
2015/07/21 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
pandas进行数据输入和输出的方法详解
2022/03/23 Python
Win2008系统搭建DHCP服务器
2022/06/25 Servers