1. 程式人生 > >python3繪圖示例6-2(基於matplotlib,繪圖流程介紹及設定等)

python3繪圖示例6-2(基於matplotlib,繪圖流程介紹及設定等)

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import os

import numpy as np
import matplotlib as mplt
from matplotlib import pyplot as plt
from matplotlib.ticker import *


# 整個影象為1個figure物件,figure物件包含多個Axes物件,每個Axes物件都擁有自己座標軸的繪圖區域
# 呼叫figure時,則呼叫plot,然後plot呼叫gca,獲取axes繪圖區域
# 然後gca呼叫gcf,獲取當前figure,如為空則自動生成 figure,相當於呼叫 subplots
# title-影象標題 Axis-座標軸 Axis Label-座標軸標註 Tick-刻度線 Tick Label-刻度註釋
# 關係如下
# fig---ax
# ---title
# ---data
# ---xaxis
# ---tick
# ---tick label
# ---label
# ---yaxis
# ---tick
# ---tick label
# ---label

# matplotlib.get_config() 獲取當前配置
# 使用者matplotlib配置檔案路徑
path=mplt.get_configdir()
print(path)

# 當前matplotlib配置檔案路徑
path2=mplt.matplotlib_fname()
print(path2)

# 系統配置檔案存放路徑
path3=os.getcwd()
print(path3)

# 讀取配置檔案內容
p=mplt.rcParams
print(p)

# 中文亂碼處理 正常顯示中文標籤 及正負號
plt.rcParams['font.sans-serif']=['Microsoft YaHei']
plt.rcParams['axes.unicode_minus']=False

# 全域性關閉
# plt.rcParams.update({'axes.formatter.useoffset':False})
# 畫圖流程:建立Figure物件->1個或多個Axes或Subplot物件->呼叫Axies建立各類Artists來畫圖

# 這裡使用的是matplotlib.pyplot 去畫圖
# 影象 指整個視窗內容 子圖值影象中的各個圖
# 圖1
# 步驟1-建立一個 2*2 的點影象 解析度為 80

# 引數說明
# 影象數量 num=None, # autoincrement if None, else integer from 1-N
# 影象的長和寬 figsize=None, # defaults to rc figure.figsize
# 解析度 dpi=None, # defaults to rc figure.dpi
# 區域背景色 facecolor=None, # defaults to rc figure.facecolor
# 區域邊緣色 edgecolor=None, # defaults to rc figure.edgecolor
# 是否繪製圖像邊緣 # frameon=True,
# FigureClass=Figure,
# clear=False,
# **kwargs
# f,axs=plt.subplots(2,2,figsize=(15,15))
fig=plt.figure(20*20,dpi=80)

# 步驟2-設定子圖位置 幾行幾列的網格 第1個引數:1行 第2個引數:1列 第3個引數:圖形在網格的位置

# 多個子圖組成大圖
# fig=plt.figure()->plt.subplot()->plot.plot()->plot.show()

# 子圖懸浮在大圖上
# fig=plt.figure()->ax=fig.add_axes(位置列表)或ax=fig.axes()->ax.plot()->plt.show()
# fig=plt.figure()->fig.add_subplot()->p=plt.Rectangle()多個->fig.add_subplot().add_patch(p)->fig.canvas.draw()->plot.show()

# plt.subplot(1,1,1)
plt.subplot(111)


# 步驟3-設定線圖屬性-自定義x y軸
# 座標軸物件 axes 可放置在影象的任意位置
# 記號位置設定 Tick Locators 記號格式化操作 Tick Formatters

# 方式1 生成資料的方法 定義新刻度的範圍和個數
x=np.linspace(-np.pi,np.pi,256,endpoint=True)
c,s=np.cos(x),np.sin(x)

# 繪製曲線 顏色 線寬 線的風格 大圖對應的小圖標籤
# 線的風格 實線 - 破折線 -- 點線 -. 虛線 : 不顯示 None '' ' '

# 線條標記
# 圓圈 o 小菱形 d 菱形 D
# 正方形 s 五邊形 p 六邊形1 h 六邊形2 H 八邊形 8
# 水平線 _ 豎線 | 加號 + 點 . 畫素 , 星號 * x X 無 None '' ' '
# 1角朝上三角形 ^ 1角朝下三角形 v 1角朝左三角形 < 1角朝右三角形 >

# 線的顏色 紅 r 黃 y 白 w 綠 g 藍 b 青 c 洋紅 m 黑 k 支援16進位制'#eeefff'或3元色組(0.3,0.3,0.3)
# 顏色 線寬 線的風格(顏色+線型) 大圖對應的小圖標籤 可用$$包裹,如$sin(x)$
plt.plot(x,c,color='blue',linewidth=2.5,linestyle='-',label='cosine')
plt.plot(x,s,color='red',linewidth=2.5,linestyle='-',label='sine')

# 屬性設定使用set_屬性 pyplot.setp()函式 屬性獲取使用 get_屬性 pyplot.getp()

# 方式2
# lines,=plt.plot(1,6,'-')
# lines.set_antialiased(False)

# 座標取值範圍
# plt.axis([xmin,xmax,ymin,ymax])

# 步驟4-1-設定x軸 y軸範圍
# 獲得當前x軸 y軸範圍值
xmin,xmax=plt.xlim()
ymin,ymax=plt.ylim()

# 橫軸的上下限
plt.xlim(xmin*1.5,xmax*1.5)

# 縱軸的上下限
plt.ylim(ymin*1.5,ymax*1.5)

# 步驟4-2-設定刻度 刻度位置 間隔 格式
ax=plt.gca()

# 關閉簡略的間隔標註
ax.get_xaxis().get_major_formatter().set_useOffset(False)

# 設定橫軸標記號
# py.xticks(np.linspace(-4,4,9,endpoint=True))
# py.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi])

# 設定橫軸標號標籤
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$+\pi/2$',r'$+\pi$'])

# 設定縱軸標記號
# plt.yticks(np.linspace(-1,1,5,endpoint=True))
# plt.yticks([-1,0,+1])

# 設定縱軸標號標籤
plt.yticks([-1,0,+1],[r'$-1$',r'$0$',r'$+1$'])

# 返回一個fig影象 和 一個 ax的 array列表
# fig,ax=plt.subplots(2,2)
# ax=plt.gca()

# 步驟4-3-設定主 次刻度 及註釋 2.5的倍數 5的倍數 0.5的倍數 1的倍數
xmin=MultipleLocator(2.5)
xmax=MultipleLocator(5)
xformat=FormatStrFormatter('%5.1f')

ymin=MultipleLocator(0.5)
ymax=MultipleLocator(1)
yformat=FormatStrFormatter('%1.1f')

# x軸 主刻度 次刻度
ax.xaxis.set_major_locator(xmax)
ax.xaxis.set_major_formatter(xformat)
ax.xaxis.set_minor_locator(xmin)

# y軸 主刻度 次刻度
ax.yaxis.set_major_locator(ymax)
ax.yaxis.set_major_formatter(yformat)
ax.yaxis.set_minor_locator(ymin)

# 網格刻度型別which major minor both
# 繪製哪個網格線xaxis yaxis x y both
ax.xaxis.grid(True, which='major')
ax.yaxis.grid(True,which='minor')

# 步驟5-移動座標 剩下下面和左邊的座標-看實際需要配置
# 設定對應的邊框是否顯示 及邊框顏色 邊框位置:left right bottom top none
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# x軸 設定刻度 top bottom both default none 位置 data axes outward
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))

# y軸
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

# 影象上的資料顯示更清晰
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(16)
label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.65))

# 步驟6-增加圖例
plt.legend(loc='upper left')

# 設定影象外側與影象間隔距離
plt.subplots_adjust(left=0.2, bottom=0.2, right=0.8, top=0.8,hspace=0.2,wspace=0.3)


# 影象標題
plt.title('圖1')

# 顯示影象
plt.show()