Python Plot+Bokeh畫圖並儲存為圖片或網頁
阿新 • • 發佈:2019-01-07
近來學習了下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) # 儲存圖片
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.
先暫時寫到這裡,希望能夠記錄自己編碼過程中的點滴,也希望能夠為遇到同樣問題的你提供些幫助。