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

xiaoxiao2021-02-28  82

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) 
转载请注明原文地址: https://www.6miu.com/read-27961.html

最新回复(0)