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()



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM