数据分析与展示(3)-- Matplotlib库基础使用

来源:互联网 发布:js打开a标签的链接 编辑:程序博客网 时间:2024/06/08 15:55
Matplotlib库的使用

一、用图表达数据

Matplotlib.pyplot绘制图形的命令子库,相当于快捷方式。

1、列表画图,并保存

import matplotlib.pyplot as plt
plt.plot([3, 1, 4, 2, 5])
plt.ylabel("grade")
plt.savefig('test', dpi=600) #默认为PNG文件,dpi:每英寸包含像素点数量
plt.show()

2、plot(x,y)

import matplotlib.pyplot as plt
plt.plot([0, 2, 4, 6, 8],[3, 2, 4, 5, 2])
plt.ylabel("Grade")
plt.axis([-1, 10, 0, 6])     #设定横纵坐标的范围
plt.show()

3、绘图区域设置:
plt.subplot(nrows, ncols, plot_number)

import matplotlib.pyplot as plt
import numpy as np

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

a = np.arange(0.0, 5.0, 0.02)

plt.subplot(211)
plt.plot(a, f(a))

plt.subplot(2,1,2)
plt.plot(a, np.cos(2*np.pi*a), 'r--')
plt.show()




二、plt.plot(x, y, format_string, **kwargs)

  • x:X轴数据,列表或数组,可选(省略时,默认为索引)。
  • y:Y轴数据,列表或数组。
  • format_string:控制曲线的格式字符串,可选。
    • 由颜色字符('b', 'g', 'r', 'c'(cyan:青绿色), '#008000'(RGB某颜色), 'm'(洋红色), 'y', 'k', 'w', '0.8'(灰度值字符串))、风格字符('-', '--', '-.', ':', ' ' ' ')、标记字符('.', ',', 'o', 'v', '^', '>', '<', '1', '2', '3', '4', 's', 'p', '*', '+', 'x', 'D', 'd', '|')组成。
  • **kwargs:第二组或更多(x, y, format_string)
    • 当绘制多条曲线时,各条曲线的x不能省略。
    • color:控制颜色;    linestyle:控制风格,linestyle='dashed';    marker:标记风格,marker='o';    markerfacecolor:    标记颜色;    markersize=20;......
import matplotlib.pyplot as plt
import numpy as np

a = np.arange(10)
plt.plot(a, a*1.5,':^', a, a*2.5, "--.", a, a*3.5,'-.o', a, a*4.5,'-v')
plt.show()





三、pyplot的中文显示

1、pyplot并不默认支持中文显示,需要rcParams修改字体实现。
会改变所有字体
.rcParams['font.family'];    .rcParams['font.style']='normal'|'italic';    .rcParams['font.size']
import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.family']='SimHei' #SimHei:黑体;'Kaiti':中文楷体;'LiSu':中文隶书;'FangSong':中文仿宋....
plt.plot([3, 1, 4, 5, 2])
plt.ylabel('纵轴(值)')
plt.savefig('test', dpi=600)
plt.show()

2、在有中文的地方增加一个属性:fontproperties
import numpy as np
import matplotlib.pyplot as plt

a = np.arange(0.0, 5.0, 0.02)

plt.xlabel('横轴:时间', fontproperties='SimHei', fontsize=20)
plt.ylabel('纵轴:振幅', fontproperties='SimHei', fontsize=20)
plt.plot(a, np.cos(2*np.pi*a), 'r--')
plt.show()






四、pyplot 的文本显示方法
  • plt.xlabel()
  • plt.ylabel()
  • plt.title()
  • plt.text():任意位置增加文本
  • plt.annotate()在图形中增加带箭头的注释
    • plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict)
专业画法:
import numpy as np
import matplotlib.pyplot as plt

a = np.arange(0.0, 5.0, 0.02)
plt.plot(a, np.cos(2*np.pi*a), 'r--')

plt.xlabel('横轴:时间', fontproperties='SimHei', fontsize=15, color='green')
plt.ylabel('纵轴:振幅', fontproperties='SimHei', fontsize=15)
plt.title(r'正弦波实例 $y=cos(2\pi x)$',fontproperties='SimHei', fontsize=25) #$$中间为LaTex语法,排版
plt.text(2, 1, r'$\mu=100$', fontsize=15)
#plt.annotate(r'$\mu=100$', xy=(2, 1), xytext=(3, 1.5),arrowprops=dict(facecolor='black',shrink=0.1, width=2))
#其中shrink表示收缩箭头,使两边留有空白。

plt.axis([-1, 6, -2, 2])
plt.grid(True)
plt.show()




五、复杂的子绘图区域

1、plt.subplot2grid()

plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)
理念:设定网格,选中网格,确定选中行列区域数量,编号从0开始。plt.subplot2grid((3,3), (1,0), colspan=2)
其中GridSpec:网格划分行列数,CurSpec:选择区域起始位置;colspan:延伸列,总格数;rowspan:延伸行,向下,总格数。

2、GridSpec类 + subplot

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

gs = gridspec.GridSpec(3,3)

ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, :-1])
ax3 = plt.subplot(gs[1:, -1])
ax4 = plt.subplot(gs[2, 0])
ax4 = plt.subplot(gs[2, 1])




Matplotlib基础绘图函数示例


一、pyplot基础图表函数概述

  • plt.plot(x, y, fmt,...)     绘制坐标图
  • plt.boxplot(data, notch, position)    绘制一个 箱形图
  • plt.bar(left, height, width, bottom)    绘制一个条形图
  • plt.barh(width, bottom, left, height)    横向条形图
  • plt.polar(thera, r)    极坐标图
  • plt.pie(data, explode)    饼图
  • plt.psd(x, NFFT=256, pad_to, Fs)    功率谱密度图
  • plt.specgram(x, NFFT=256, pad_to, F)    谱图
  • plt.cohere(x, y, NFFT=256, Fs)    X-Y的相关性函数
  • plt.scatter(x, y)    散点图,其中 x和 y长度相同
  • plt.step(x, y, where)    步阶图
  • plt.hist(x, bins, normed)    直方图
  • plt.contour(X, Y, Z, N)    等值图
  • plt.vlines()    垂直图
  • plt.stem(x, y, linefmt, marketfmt)    柴火图
  • plt.plot_date()    数据日期

1、pyplot饼图绘制 plt.pie()

import matplotlib.pyplot as plt

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0)#设定每块突出比例

plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
        shadow=False, startangle=90)#autopct中间显示百分数的方式

plt.axis('equal')#将椭圆饼图改为正圆     
plt.show()




2、直方图 plt.hist()

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
mu, sigma = 100, 20#均值和标准差
a = np.random.normal(mu, sigma, size=100)

plt.hist(a, 20, normed=1, histtype='stepfilled', facecolor='b', alpha=0.75)
#其中20代表bins为直方图的个数
#normed=1,将出现个数归一化总为1;normal=0,高度表示出现的个数

plt.title('Histogram')

plt.show()



3、面向对象绘制极坐标

import numpy as np
import matplotlib.pyplot as plt

N =20
theta = np.linspace(0.0, 2*np.pi, N, endpoint=False)
radii = 10 * np.random.rand(N)
width = np.pi / 4 * np.random.rand(N)

ax = plt.subplot(111, projection='polar') #采用面向对象的方法来绘制极坐标图
bars = ax.bar(theta, radii, width=width, bottom=0.0)

for r, bar in zip(radii, bars):
    bar.set_facecolor(plt.cm.viridis(r / 10.))
    bar.set_alpha(0.5)

plt.show()



4、面向对象绘制散点图

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(10*np.random.randn(100), 10*np.random.randn(100), 'o')
ax.set_title('Simple Scatter')

plt.show()





小结:如何绘制是次要的,关键是,找到合适的表现数据的图形,参数设计......。


引力波的绘制

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile

rate_h, hstrain= wavfile.read(r"H1_Strain.wav","rb")
rate_l, lstrain= wavfile.read(r"L1_Strain.wav","rb")
#reftime, ref_H1 = np.genfromtxt('GW150914_4_NR_waveform_template.txt').transpose()
reftime, ref_H1 = np.genfromtxt('wf_template.txt').transpose() #使用python123.io下载文件
#reftime:时间序列,ref_H1:引力数据;np.genfromtxt()读入为两行矩阵

htime_interval = 1/rate_h   #得到波形的时间间隔
ltime_interval = 1/rate_l
fig = plt.figure(figsize=(12, 6))   #figure()创建绘图空间

# 信号起始点
htime_len = hstrain.shape[0]/rate_h #个数*时间间隔,得到总时间长度
htime = np.arange(-htime_len/2, htime_len/2 , htime_interval)#以原点中心对称

plth = fig.add_subplot(221)
plth.plot(htime, hstrain, 'y')
plth.set_xlabel('Time (seconds)')
plth.set_ylabel('H1 Strain')
plth.set_title('H1 Strain')

ltime_len = lstrain.shape[0]/rate_l
ltime = np.arange(-ltime_len/2, ltime_len/2 , ltime_interval)
pltl = fig.add_subplot(222)
pltl.plot(ltime, lstrain, 'g')
pltl.set_xlabel('Time (seconds)')
pltl.set_ylabel('L1 Strain')
pltl.set_title('L1 Strain')

pltref = fig.add_subplot(212)
pltref.plot(reftime, ref_H1)
pltref.set_xlabel('Time (seconds)')
pltref.set_ylabel('Template Strain')
pltref.set_title('Template')

fig.tight_layout()  #自动调整图像边缘

plt.savefig("Gravitational_Waves_Original.png")
plt.show()
plt.close(fig)


阅读全文
0 0
原创粉丝点击