① python熱力圖繪制方法—新手教程
# Python熱力圖繪制方法
熱力圖的使用場景有
1.描述數據在空間的密集程度,常見有城市熱力圖,區域熱力圖
2.描述多個變數之間相關性高低程度
# step 1 准備數據集,讀取excel列表內容,usecols = index, 這里是表裡的第一列不讀取。
index =range(1, 11)
dataset = np.array(pd.read_csv(r'C:\Users\Administrator\Desktop\heatmap.csv', usecols=index))
# step 2 讀取excel行索引轉成列表,作為熱力圖的y軸標簽
a = (pd.read_csv(r'C:\Users\Administrator\Desktop\heatmap.csv', usecols=[0]))
y_label =list(a.stack())
# step 3 讀取excel列索引轉成列表,作為熱力圖的x軸標簽
b = (pd.read_csv(r'C:\Users\Administrator\Desktop\heatmap.csv'))
column_index=(b.columns.tolist())
x_label = column_index[1:]
# 這一步是為了計算熱力圖的數據的最大值,可以進行標准化處理,也可以直接顯示數據,dataframe轉成list,從list裡面尋找最大值
dataset_max = (pd.read_csv(r'C:\Users\Administrator\Desktop\heatmap.csv', usecols=index))
list1 = np.array(dataset_max.stack())
max_number =max(list1)
# step 4 開始繪制熱力圖
plt.figure(figsize=(14, 8))# 定義輸出圖像大小,annot參數決定是否在熱力圖上顯示數值,Vmax,Vmin表示最大最小值,cmap表示顏色
sns.heatmap(dataset, fmt='.0f', annot=True, vmin=0, vmax=max_number, cmap='Reds', yticklabels=y_label,
xticklabels=x_label)
# 繪制標簽
plt.xlabel('This is x label', labelpad=15)
plt.ylabel('This is y label', labelpad=20)
plt.show()
② python matplotlib 圖像可視化
Python畫圖之總結待整理
https://morvanzhou.github.io/tutorials/data-manipulation/plt/
http://blog.sciencenet.cn/blog-1408284-850983.html
http://www.cnblogs.com/DHUtoBUAA/p/6619099.html
http://blog.csdn.net/wuguangbin1230/article/details/72858612
http://blog.sciencenet.cn/blog-251664-800766.html
http://blog.csdn.net/wuguangbin1230/article/details/72858612
http://www.jianshu.com/p/0a81b57bbb8c
https://pythonprogramming.net/
http://blog.csdn.net/haoji007/article/details/52063168
Python Data Visualizations
Seaborn 庫: https://seaborn.pydata.org/
Python Seaborn 教程: http://elitedatascience.com/python-seaborn-tutorial
matplotlib: plotting with Python
matplotlib: plotting with Python-github
python-data-visualization-course
Interactive Web Plotting for Python
Interactive Web Plotting for Python-github
https://morvanzhou.github.io/tutorials/data-manipulation/plt/3-3-contours/
https://github.com/MorvanZhou/tutorials/tree/master/matplotlibTUT
https://github.com/jiandanjinxin/tf-dev-summit-tensorboard-tutorial
https://github.com/jiandanjinxin/tensorflow-mnist-tutorial
CSDN-markdown編輯器語法——字體、字型大小與顏色
%matplotlib inline
%matplotlib notebook
Need to use either
or
Only one in each notebook! using inline will just sent png images to browser, using notebook will provide interactivity and allow updating old figures. With notebook you need to make sure to create a new figure before plotting, otherwise the last one will be updated!
還有簡便的 plt.close('all') 關閉所有圖,不用管 fig 號碼
Some plots from these tutorials:
調整名字和間隔
設置不同名字和位置
調整坐標軸
參數loc='upper right'
表示圖例將添加在圖中的右上角.
調整位置和名稱
最後我們得到帶有圖例信息的圖片.
移動坐標
然後我們挪動坐標軸的位置.
然後標注出點(x0, y0)的位置信息. 用plt.plot([x0, x0,], [0, y0,], 'k--', linewidth=2.5)
畫出一條垂直於x軸的虛線.
添加註釋 annotate
接下來我們就對(x0, y0)這個點進行標注.
其中參數xycoords='data'
是說基於數據的值來選位置,xytext=(+30, -30)
和textcoords='offset points'
對於標注位置的描述 和 xy 偏差值,arrowprops
是對圖中箭頭類型的一些設置.
添加註釋 text
其中-3.7, 3,
是選取text的位置, 空格需要用到轉字元
,fontdict
設置文本字體.
生成圖形
當圖片中的內容較多,相互遮蓋時,我們可以通過設置相關內容的透明度來使圖片更易於觀察,也即是通過本節中的bbox
參數設置來調節圖像信息.
首先參考之前的例子, 我們先繪制圖像基本信息:
調整坐標
然後對被遮擋的圖像調節相關透明度,本例中設置 x軸 和 y軸 的刻度數字進行透明度設置
其中label.set_fontsize(12)重新調節字體大小,bbox設置目的內容的透明度相關參,facecolor調節 box 前景色,edgecolor 設置邊框, 本處設置邊框為無,alpha設置透明度. 最終結果如下:
散點圖
首先,先引入matplotlib.pyplot簡寫作plt,再引入模塊numpy用來產生一些隨機數據。生成1024個呈標准正態分布的二維數據組 (平均數是0,方差為1) 作為一個數據集,並圖像化這個數據集。每一個點的顏色值用T來表示:
數據集生成完畢,現在來用scatterplot這個點集,滑鼠點上去,可以看到這個函數的各個parameter的描述,如下圖:
輸入X和Y作為location,size=75,顏色為T,color map用默認值,透明度alpha 為 50%。 x軸顯示範圍定位(-1.5,1.5),並用xtick()函數來隱藏x坐標軸,y軸同理:
今天的柱狀圖分成上下兩部分,每一個柱體上都有相應的數值標注,並且取消坐標軸的顯示。
生成基本圖形
向上向下分別生成12個數據,X為 0 到 11 的整數 ,Y是相應的均勻分布的隨機數據。使用的函數是plt.bar
,參數為X和Y:
這樣我們就生成了下圖所示的柱狀圖基本框架:
現在的結果呈現:
接下來我們用函數plt.text分別在柱體上方(下方)加上數值,用%.2f保留兩位小數,橫向居中對齊ha='center',縱向底部(頂部)對齊va='bottom':
最終的結果就像開始一樣:
畫等高線
數據集即三維點 (x,y) 和對應的高度值,共有256個點。高度值使用一個 height function f(x,y) 生成。 x, y 分別是在區間 [-3,3] 中均勻分布的256個值,並用meshgrid在二維平面中將每一個x和每一個y分別對應起來,編織成柵格:
接下來進行顏色填充。使用函數plt.contourf把顏色加進去,fill, 位置參數分別為:X, Y, f(X,Y)。透明度0.75,並將 f(X,Y) 的值對應到color map的暖色組中尋找對應顏色。8代表等高線的個數。
接下來進行等高線繪制。使用plt.contour函數劃線。位置參數為:X, Y, f(X,Y)。顏色選黑色,線條寬度選0.5。現在的結果如下圖所示,只有顏色和線條,還沒有數值Label:
添加高度數字
其中,8代表等高線的密集程度,這里被分為10個部分。如果是0,則圖像被一分為二。
最後加入Label,inline控制是否將Label畫在線裡面,字體大小為10。並將坐標軸隱藏:
隨機矩陣畫圖
這一節我們講解怎樣在matplotlib中列印出圖像。這里我們列印出的是純粹的數字,而非自然圖像。 我們今天用這樣 3x3 的 2D-array 來表示點的顏色,每一個點就是一個pixel。
colorbar
下面我們添加一個colorbar ,其中我們添加一個shrink參數,使colorbar的長度變短為原來的92%:
3D
首先在進行 3D Plot 時除了導入 matplotlib ,還要額外添加一個模塊,即 Axes 3D 3D 坐標軸顯示:
之後要先定義一個圖像窗口,在窗口上添加3D坐標軸,顯示成下圖:
接下來給進 X 和 Y 值,並將 X 和 Y 編織成柵格。每一個(X, Y)點對應的高度值我們用下面這個函數來計算。
其中,rstride 和 cstride 分別代表 row 和 column 的跨度。
下面兩個圖分別是跨度為1 和 5 的效果:
投影
下面添加 XY 平面的等高線:
如果 zdir 選擇了x,那麼效果將會是對於 XZ 平面的投影,效果如下
③ python用matplotlib畫K線
#-*-coding:utf-8-*-
importnumpyasnp
importpandasaspd
importmatplotlib.pyplotasplt
frommatplotlib.datesimportDateFormatter,WeekdayLocator,DayLocator,MONDAY
frommatplotlib.financeimportquotes_historical_yahoo_ohlc,candlestick_ohlc
#從雅虎財經獲取歷史行情
date1=(2017,1,1)
date2=(2017,4,30)
quotes=quotes_historical_yahoo_ohlc('600000.ss',date1,date2)
iflen(quotes)==0:
raiseSystemExit
#創建一個子圖
fig,ax=plt.subplots()
fig.subplots_adjust(bottom=0.2)
#設置主要刻度和顯示格式
mondays=WeekdayLocator(MONDAY)
mondaysFormatter=DateFormatter('%Y-%m-%d')
ax.xaxis.set_major_locator(mondays)
ax.xaxis.set_major_formatter(mondaysFormatter)
#設置次要刻度和顯示格式
alldays=DayLocator()
alldaysFormatter=DateFormatter('%d')
ax.xaxis.set_minor_locator(alldays)
#ax.xaxis.set_minor_formatter(alldaysFormatter)
#設置x軸為日期
ax.xaxis_date()
ax.autoscale_view()
#X軸刻度文字傾斜45度
plt.setp(plt.gca().get_xticklabels(),rotation=45,horizontalalignment='right')
candlestick_ohlc(ax,quotes,width=0.6,colorup='r',colordown='g')
ax.grid(True)
plt.title('600000')
plt.show()
④ Python量化教程:不得不學的K線圖「代碼復制可用」
不管是對量化分析師還是普通的投資者來說,K線圖(蠟燭圖)都是一種很經典、很重要的工具。在K線圖中,它會繪制每天的最高價、最低價、開盤價和收盤價,這對於我們理解股票的趨勢以及每天的多空對比很有幫助。
一般來說,我們會從各大券商平台獲取K線圖,但是這種情況下獲得的K線圖往往不能靈活調整,也不能適應復雜多變的生產需求。因此我們有必要學習一下如何使用Python繪制K線圖。
需要說明的是,這里mpl_finance是原來的matplotlib.finance,但是現在獨立出來了(而且好像沒什麼人維護更新了),我們將會使用它提供的方法來繪制K線圖;tushare是用來在線獲取股票數據的庫;matplotlib.ticker中有個FuncFormatter()方法可以幫助我們調整坐標軸;matplotlib.pylab.date2num可以幫助我們將日期數據進行必要的轉化。
我們以上證綜指18年9月份以來的行情為例。
我們先使用mpl_finance繪制一下,看看是否一切正常。
可以看到,所有的節假日包括周末,在這里都會顯示為空白,這對於我們圖形的連續性非常不友好,因此我們要解決掉他們。
可以看到,空白問題完美解決,這里我們解釋一下。由於matplotlib會將日期數據理解為 連續數據 ,而連續數據之間的間距是有意義的,所以非交易日即使沒有數據,在坐標軸上還是會體現出來。連續多少個非交易日,在坐標軸上就對應了多少個小格子,但這些小格子上方並沒有相應的蠟燭圖。
明白了它的原理,我們就可以對症下葯了。我們可以給橫坐標(日期)傳入連續的、固定間距的數據,先保證K線圖的繪制是連續的;然後生成一個保存有正確日期數據的列表,接下來,我們根據坐標軸上的數據去取對應的正確的日期,並替換為坐標軸上的標簽即可。
上邊format_date函數就是這個作用。由於前邊我們給dates列生成了從0開始的序列連續數據,因此我們可以直接把它當作索引,從真正的日期列表裡去取對應的數據。在這里我們要使用matplotlib.ticker.FuncFormattter()方法,它允許我們指定一個格式化坐標軸標簽的函數,在這個函數里,我們需要接受坐標軸的值以及位置,並返回自定義的標簽。
你學會了嗎?
當然,一個完整的K線圖到這里並沒有結束,後邊我們會考慮加入均線、成交量等元素,感興趣的同學歡迎關注哦!
⑤ 怎麼利用python代碼繪制蠟燭線型k線圖
importmatplotlib.pyplotasplt
frommatplotlib.datesimportDateFormatter,WeekdayLocator,DayLocator,MONDAY,YEARLY
frommatplotlib.financeimportquotes_historical_yahoo_ohlc,candlestick_ohlc
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
ticker='600028'#600028是"中國石化"的股票代碼
ticker+='.ss'#.ss表示上證.sz表示深證
date1=(2015,8,1)#起始日期,格式:(年,月,日)元組
date2=(2016,1,1)#結束日期,格式:(年,月,日)元組
mondays=WeekdayLocator(MONDAY)#主要刻度
alldays=DayLocator()#次要刻度
#weekFormatter=DateFormatter('%b%d')#如:Jan12
mondayFormatter=DateFormatter('%m-%d-%Y')#如:2-29-2015
dayFormatter=DateFormatter('%d')#如:12
quotes=quotes_historical_yahoo_ohlc(ticker,date1,date2)
iflen(quotes)==0:
raiseSystemExit
fig,ax=plt.subplots()
fig.subplots_adjust(bottom=0.2)
ax.xaxis.set_major_locator(mondays)
ax.xaxis.set_minor_locator(alldays)
ax.xaxis.set_major_formatter(mondayFormatter)
#ax.xaxis.set_minor_formatter(dayFormatter)
#plot_day_summary(ax,quotes,ticksize=3)
candlestick_ohlc(ax,quotes,width=0.6,colorup='r',colordown='g')
ax.xaxis_date()
ax.autoscale_view()
plt.setp(plt.gca().get_xticklabels(),rotation=45,horizontalalignment='right')
ax.grid(True)
plt.title('中國石化600028')
plt.show()
⑥ 如何用python做k線形態識別
K線形態識別是比較難的一個點,難在思路上,代碼都是其次。分享一下我的思路吧,通過api獲取了行情信息之後(一般都是pandas.DataFrame格式,基本上都包含ohlc和volume),那麼假如我需要識別十字星,那麼用df['open']==df['close']把其布爾值賦值給a, 然後df['high']>df['open']>df['low']賦值給b。然後
for i in range(len(df)):
df['outcome']=np.where(a+b==1, 1, 0)
df[df['outcome']==1]
這樣就能把所有的十字星給選出來了。
⑦ Python 爬取同花順行業板塊日K線數據
最近一直想研究一下行業k線,找了很久,在同花順找到了獲取的url
比如,881129 通信設備板塊
http://d.10jqka.com.cn/v4/line/bk_881129/01/last.js 獲取日k線數據 但是需要cookie不然只能訪問一次
(利用Google瀏覽器的 右擊頁面 檢查--Network 可以看到頁面請求的url)
⑧ python可視化神器——pyecharts庫
無意中從今日頭條中看到的一篇文章,可以生成簡單的圖表。據說一些大數據開發們也是經常用類似的圖表庫,畢竟有現成的,改造下就行,誰會去自己造輪子呢。
pyecharts是什麼?
pyecharts 是一個用於生成 Echarts 圖表的類庫。Echarts 是網路開源的一個數據可視化 JS 庫。用 Echarts 生成的圖可視化效果非常棒, pyecharts 是為了與 Python 進行對接,方便在 Python 中直接使用數據生成圖 。使用pyecharts可以生成獨立的網頁,也可以在flask、django中集成使用。
安裝很簡單:pip install pyecharts
如需使用 Jupyter Notebook 來展示圖表,只需要調用自身實例即可,同時兼容 Python2 和 Python3 的 Jupyter Notebook 環境。所有圖表均可正常顯示,與瀏覽器一致的交互體驗,簡直不要太強大。
參考自pyecharts官方文檔: http://pyecharts.org
首先開始來繪制你的第一個圖表
使用 Jupyter Notebook 來展示圖表,只需要調用自身實例即可
add() 主要方法,用於添加圖表的數據和設置各種配置項
render() 默認將會在根目錄下生成一個 render.html 的文件,文件用瀏覽器打開。
使用主題
自 0.5.2+ 起,pyecharts 支持更換主體色系
使用 pyecharts-snapshot 插件
如果想直接將圖片保存為 png, pdf, gif 格式的文件,可以使用 pyecharts-snapshot。使用該插件請確保你的系統上已經安裝了 Nodejs 環境。
安裝 phantomjs $ npm install -g phantomjs-prebuilt
安裝 pyecharts-snapshot $ pip install pyecharts-snapshot
調用 render 方法 bar.render(path='snapshot.png') 文件結尾可以為 svg/jpeg/png/pdf/gif。請注意,svg 文件需要你在初始化 bar 的時候設置 renderer='svg'。
圖形繪制過程
基本上所有的圖表類型都是這樣繪制的:
chart_name = Type() 初始化具體類型圖表。
add() 添加數據及配置項。
render() 生成本地文件(html/svg/jpeg/png/pdf/gif)。
add() 數據一般為兩個列表(長度一致)。如果你的數據是字典或者是帶元組的字典。可利用 cast() 方法轉換。
多次顯示圖表
從 v0.4.0+ 開始,pyecharts 重構了渲染的內部邏輯,改善效率。推薦使用以下方式顯示多個圖表。如果使是 Numpy 或者 Pandas,可以參考這個示例
當然你也可以採用更加酷炫的方式,使用 Jupyter Notebook 來展示圖表,matplotlib 有的,pyecharts 也會有的
Note: 從 v0.1.9.2 版本開始,廢棄 render_notebook() 方法,現已採用更加 pythonic 的做法。直接調用本身實例就可以了。
比如這樣
還有這樣
如果使用的是自定義類,直接調用自定義類示例即可
圖表配置
圖形初始化
通用配置項
xyAxis:平面直角坐標系中的 x、y 軸。(Line、Bar、Scatter、EffectScatter、Kline)
dataZoom:dataZoom 組件 用於區域縮放,從而能自由關注細節的數據信息,或者概覽數據整體,或者去除離群點的影響。(Line、Bar、Scatter、EffectScatter、Kline、Boxplot)
legend:圖例組件。圖例組件展現了不同系列的標記(symbol),顏色和名字。可以通過點擊圖例控制哪些系列不顯示。
label:圖形上的文本標簽,可用於說明圖形的一些數據信息,比如值,名稱等。
lineStyle:帶線圖形的線的風格選項(Line、Polar、Radar、Graph、Parallel)
grid3D:3D笛卡爾坐標系組配置項,適用於 3D 圖形。(Bar3D, Line3D, Scatter3D)
axis3D:3D 笛卡爾坐標系 X,Y,Z 軸配置項,適用於 3D 圖形。(Bar3D, Line3D, Scatter3D)
visualMap:是視覺映射組件,用於進行『視覺編碼』,也就是將數據映射到視覺元素(視覺通道)
markLine&markPoint:圖形標記組件,用於標記指定的特殊數據,有標記線和標記點兩種。(Bar、Line、Kline)
tooltip:提示框組件,用於移動或點擊滑鼠時彈出數據內容
toolbox:右側實用工具箱
圖表詳細
Bar(柱狀圖/條形圖)
Bar3D(3D 柱狀圖)
Boxplot(箱形圖)
EffectScatter(帶有漣漪特效動畫的散點圖)
Funnel(漏斗圖)
Gauge(儀表盤)
Geo(地理坐標系)
GeoLines(地理坐標系線圖)
Graph(關系圖)
HeatMap(熱力圖)
Kline/Candlestick(K線圖)
Line(折線/面積圖)
Line3D(3D 折線圖)
Liquid(水球圖)
Map(地圖)
Parallel(平行坐標系)
Pie(餅圖)
Polar(極坐標系)
Radar(雷達圖)
Sankey(桑基圖)
Scatter(散點圖)
Scatter3D(3D 散點圖)
ThemeRiver(主題河流圖)
TreeMap(矩形樹圖)
WordCloud(詞雲圖)
用戶自定義
Grid 類:並行顯示多張圖
Overlap 類:結合不同類型圖表疊加畫在同張圖上
Page 類:同一網頁按順序展示多圖
Timeline 類:提供時間線輪播多張圖
統一風格
註:pyecharts v0.3.2以後,pyecharts 將不再自帶地圖 js 文件。如用戶需要用到地圖圖表,可自行安裝對應的地圖文件包。
地圖文件被分成了三個 Python 包,分別為:
全球國家地圖:
echarts-countries-pypkg
中國省級地圖:
echarts-china-provinces-pypkg
中國市級地圖:
echarts-china-cities-pypkg
直接使用python的pip安裝
但是這里大家一定要注意,安裝完地圖包以後一定要重啟jupyter notebook,不然是無法顯示地圖的。
顯示如下:
總得來說,這是一個非常強大的可視化庫,既可以集成在flask、Django開發中,也可以在做數據分析的時候單獨使用,實在是居家旅行的必備神器啊