1. 程式人生 > >Python Plot+Bokeh畫圖並儲存為圖片或網頁

Python Plot+Bokeh畫圖並儲存為圖片或網頁

近來學習了下python matplotlib繪圖,其功能還是很強大的。
由於需要在一張圖上展示多個子圖,所以用到subplot,python 繪製這種圖的方式有很多種,這裡介紹其中一種方法:

1.第一種畫圖plt.subplots()

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus'] = False  # 用來正常顯示負號
plt.style.use('ggplot'
) #可以繪製出ggplot的風格 # 給出x,y值 x = np.linspace(0, 2 * np.pi, 400) y = np.sin(x ** 2) #只畫一個圖 f, ax = plt.subplots() ax.set_title('Simple sin_plot') ax.plot(x, y) plt.show() p1= r'E:\vpn\test1.png'# 圖片儲存路徑 plt.savefig(p1)# 儲存圖片

程式碼顯示結果

plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None
, gridspec_kw=None, **fig_kw)

plt.subplots函式返回了一個figure物件和一個包含nrows * ncols的子圖的Axes objects陣列,預設返回一個Axes object(matplotlib.axes.Axes 物件)。為如何建立個別塊提供合理的控制。

  • plt.subplots
  • 圖片儲存savefig

其中sharex,sharey屬性為設定子圖是否共享x y軸。

f, ax = plt.subplots(1, 2, sharey=True)
#f, ax = plt.subplots(2, sharey=True)效果同上
# 此時的ax為一個Axes物件陣列,包含兩個物件 ax[0].set_title('Sharing Y axis') ax[0].plot(x, y) ax[1].scatter(x, y) plotPath= r'E:\test\sharey.png' # 圖片儲存路徑 plt.savefig(plotPath) # 儲存圖片

共享y軸座標

2.Bokeh繪圖並儲存為網頁
首先需要安裝bokeh包,使用命令:
pip install bokeh
使用bokeh繪圖儲存為網頁後,網頁中可以實現拖拽等功能,而以上儲存為的圖片則不能

from bokeh.plotting import figure, output_file, show
from bokeh.io import save  #引入儲存函式
from bokeh.layouts import gridplot 
lb = 'test'
tools = "pan,box_zoom,reset,save"  #網頁中顯示的基本按鈕:儲存,重置等
plots = []
path = r"d:\test\bokehTest.html"  #儲存路徑
output_file(path)  
x = list(range(11))
y0 = x
y1 = [10 - i for i in x]
y2 = [abs(i - 5) for i in x]

# create a new plot
s1 = figure(plot_width=250, plot_height=600, title=None)
s1.circle(x, y0, size=6, color="navy", alpha=0.5)

# create another one
s2 = figure(plot_width=250, plot_height=600, title=None)
s2.triangle(x, y1, size=10, color="firebrick", alpha=0.5)

#將以上兩個圖以列的形式展示在頁面上 

show(column(s1, s2))
# 使以上兩個圖在同一行,展示在頁面上 
# show(row(s1, s2))
# grid = gridplot([s1, s2])效果同column(s1, s2)
# show the results
# show(grid)

save(obj=column(s1, s2), filename=path, title="outputTest")
# save 之前必須有output_file才可以儲存成功:This output file will be #overwritten on every save, e.g., each time show() or save() is invoked.

先暫時寫到這裡,希望能夠記錄自己編碼過程中的點滴,也希望能夠為遇到同樣問題的你提供些幫助。