解決Python Matplotlib繪圖數(shù)據(jù)點(diǎn)位置錯(cuò)亂問(wèn)題
在繪制正負(fù)樣本在各個(gè)特征維度上的CDF(累積分布)圖時(shí)出現(xiàn)了以下問(wèn)題:
問(wèn)題具體表現(xiàn)為:
1.幾個(gè)負(fù)樣本的數(shù)據(jù)點(diǎn)位置倒錯(cuò)
2.X軸刻度變成了亂七八糟一團(tuán)鬼東西
最終解決辦法
造成上述情況的原因其實(shí)是由于輸入matplotlib.plot()函數(shù)的數(shù)據(jù)x_data和y_data從CSV文件中直接導(dǎo)入后格式為string,因此才會(huì)導(dǎo)致所有數(shù)據(jù)點(diǎn)的x坐標(biāo)都被直接刻在了x軸上,且由于坐標(biāo)數(shù)據(jù)格式錯(cuò)誤,部分點(diǎn)也就表現(xiàn)為“亂點(diǎn)”。解決辦法就是導(dǎo)入x,y數(shù)據(jù)后先將其轉(zhuǎn)化為float型數(shù)據(jù),然后輸入plot()函數(shù),問(wèn)題即解決。
補(bǔ)充知識(shí):matplotlib如何在繪制時(shí)間序列時(shí)跳過(guò)無(wú)數(shù)據(jù)的區(qū)間
其實(shí)官方文檔里就提供了方法,這里簡(jiǎn)單的翻譯并記錄一下.
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:
解決方案是通過(guò)傳遞x軸數(shù)據(jù)的代理,比如下標(biāo),
然后通過(guò)自定義的'formatter'去取到相對(duì)應(yīng)的時(shí)間信息
manual內(nèi)示例代碼:
import numpy as np import matplotlib.pyplot as plt import matplotlib.mlab as mlab import matplotlib.ticker as ticker #讀數(shù)據(jù) 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): #保證下標(biāo)不越界,很重要,越界會(huì)導(dǎo)致最終plot坐標(biāo)軸label無(wú)顯示 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()
示例:
同樣一段數(shù)據(jù)上為原始,下為去掉無(wú)數(shù)據(jù)間隔區(qū)間
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]) #用下標(biāo)代理原始時(shí)間戳數(shù)據(jù) idx_pxy = NP.arange(df.shape[0]) #下標(biāo)-時(shí)間轉(zhuǎn)換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數(shù)據(jù)代理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) #優(yōu)化label顯示,非必須 fig.autofmt_xdate() PLT.show()
很多時(shí)候亂翻google還不如好好通讀官方manual…
以上這篇解決Python Matplotlib繪圖數(shù)據(jù)點(diǎn)位置錯(cuò)亂問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 給我一面國(guó)旗 python幫你實(shí)現(xiàn)
- 使用Python的turtle模塊畫(huà)國(guó)旗
- 給你一面國(guó)旗 教你用python畫(huà)中國(guó)國(guó)旗
- Python三維繪圖之Matplotlib庫(kù)的使用方法
- Python Matplotlib繪圖基礎(chǔ)知識(shí)代碼解析
- Python繪圖之二維圖與三維圖詳解
- Python實(shí)現(xiàn)手繪圖效果實(shí)例分享
- python matplotlib 繪圖 和 dpi對(duì)應(yīng)關(guān)系詳解
- python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5簡(jiǎn)單繪圖板實(shí)例與代碼分析
- python Plotly繪圖工具的簡(jiǎn)單使用
- python 繪制國(guó)旗的示例
相關(guān)文章
python數(shù)據(jù)可視化matplotlib繪制折線圖示例
這篇文章主要為大家介紹了python數(shù)據(jù)可視化matplotlib繪制折線圖的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06pyspark給dataframe增加新的一列的實(shí)現(xiàn)示例
這篇文章主要介紹了pyspark給dataframe增加新的一列的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04tensorflow 分類(lèi)損失函數(shù)使用小記
這篇文章主要介紹了tensorflow 分類(lèi)損失函數(shù)使用小記,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Python如何利用pandas讀取csv數(shù)據(jù)并繪圖
這篇文章主要介紹了Python如何利用pandas讀取csv數(shù)據(jù)并繪圖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Python 面向?qū)ο笾?lèi)class和對(duì)象基本用法示例
這篇文章主要介紹了Python 面向?qū)ο笾?lèi)class和對(duì)象基本用法,結(jié)合實(shí)例形式詳細(xì)分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類(lèi)class和對(duì)象基本概念、原理、使用方法與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02