【matplotlib】北理工嵩天老Python数据分析及展示matplotlib部分学习笔记

学完Numpy该学matplotlib了,看了看MATLAB入门课,现在看应该非常简单了。
学习资料来自MOOC北理工嵩天老师的Python数据分析与展示,链接放在下面。
在Ubuntu20.04中使用spyder进行学习。
Have fun!

初探matplotlib

引入matplotlib的默认方法:一般来说我们用的最多的是子库pyplot

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

plt.plot([3, 1, 4, 5, 2])
plt.ylabel("grade")
plt.show()

跟matlab比较像,就是调用的函数都是在plt包下的。

ylabel指定y轴名称,show在右侧控制台中显示图像。

保存图像:

savefig(imageName,dpi):第一个参数指定图像名称,第二个指定dpi(dot per inch)图像质量。

指定横纵坐标的区间:

axis:

plt.axis([-1, 10, 0, 6])

x轴-1~10,y轴0~6。

演示:

import matplotlib.pyplot as plt

plt.plot([0, 2, 4, 6, 8], [3, 1, 4, 5, 2])
plt.ylabel("grade")
plt.axis([-1, 10, 0, 6])
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UZdTEuer-1654179393989)(src/images/test.png)]

plot相关见北邮电子院MATLAB入门

对曲线特征描述也可以使用参数color,marker,linestyle,markerfacecolor,markersize。字符表示时顺序最好是color,marker,linestyle.

plot的中文显示问题及解决方案

对于研究生或者以后要写英文论文而言,基本上没有这方面的困惑,但是平时组会还有工作中这方面存在这方面的需求,了解一下最好。

pyplot默认不支持中文的显示,需要设置rcParams参数:

import matplotlib
import matpotlib.pyplot as plt

matplotlib.rcParams['font.family'] = 'SimHei'
plt.plot([3, 1, 4, 5, 2])
plt.ylabel("纵轴")
pt.show()

rcParams属性:

attributescomment
‘font.family’字体名字
‘font.style’字体风格正常’normal’,斜体’italic’
‘font.size’字体大小,整数字号或者’large’,‘x-small’

family的几个例子,这些中文字体一般需要下载到固定位置:

比如我目前用的是anaconda3的python3.9:

/home/leiyunfei/anaconda3/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf

下载ttf文件后将文件放在这个文件夹下并且删除:

~/.cache/matplotlib

文件夹下的matplotlib缓存。重启spyder就好了。

示例:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib

matplotlib.rcParams['font.family'] = 'STSong'
matplotlib.rcParams['font.size'] = 20

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

plt.xlabel('横轴:时间')
plt.ylabel('纵轴:振幅')
plt.plot(a, np.cos(2*np.pi*a), 'r--')
plt.savefig('redWave')
plt.show()

在这里遇到一个坑,使用savefig时保存的图片不完整,这是因为savefig有一个参数bbox_inches,默认情况只保存给定区域内的图像,设定bbox_inches则会保存全部图像。

之后这里又遇到一个坑savefig函数要在show函数之前使用,否则保存的是空白。

**虽然这里设定rcParams可以解决中文的问题,**但是这样会更改全局的属性,这显然不太好,那么还有一种方法,只在需要中文显示的时候使用,更改本次的属性:

import numpy as np
import matplotlib.pyplot as plt

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

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

xlabel,ylabel中修改fontpropertiesfontsize来修改本次的中文显示参数。

pyplot的所有文本显示函数

functioncomment
plt.xlabel()对x轴增加文本
plt.ylabel()对y轴增加文本
plt.title()图像上方增加文本
plt.text()在任意位置增加文本
plt.annotate()在图形中增加带箭头的注释

实例:

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), 'k--')

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)
plt.text(2, 1, r'$\mu=100$', fontsize=15)

plt.axis([-1, 6, -2, 2])
plt.grid(True)
plt.savefig('textExample', bbox_inches='tight')
plt.show()

注意:这里的$$中的是Latex风格的行内公式,字符串前面有r代表raw string,屏蔽转义字符。

plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict)

参数如下:

attributescomment
text注释的文本
xy箭头位置
xytext文本位置
xycoords箭头坐标系统
textcoords文本坐标系统,默认与xycoords相同
arrowprops箭头属性

其中arrowprops中包含属性:

attributescomment
width箭头宽度,单位是点
facecolor箭头颜色
shrink箭头收缩,单位百分比
headwidth箭头头部的宽度
headlength箭头头部的长度
其他很多

实例:

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), 'c-.')

plt.xlabel("time", fontsize=15, color='blue')
plt.ylabel("amplitude")
plt.title(r'sin wave $y=cos(2\pi x)$', fontsize=15)
plt.annotate(r'$\mu=100$', xy=(2,1), xytext=(3,1.5),
             arrowprops=dict(facecolor='black', shrink=0.1, width=2))
plt.axis([-1, 6, -2, 2])
plt.grid(True)
plt.savefig('annotateExample', bbox_inches='tight')
plt.show()

老师说,掌握到这样就差不多了,有必要再去深挖。

子区域绘图

suplot2grid

subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)

参数解释:

argscomments
shape元组,表示想将图分割成什么样的比如(3, 3),将总图化成3*3的
loc元组,绘制起始位置,比如(1, 0),从第1行第0列起始
rowspan行扩展,占几行,默认1
colspan列扩展,占几列,默认1

实例:

import matplotlib.pyplot as plt

plt.subplot2grid((3, 3), (0, 0), colspan=3)
plt.subplot2grid((3, 3), (1, 0), colspan=2)
plt.subplot2grid((3, 3), (1, 2), rowspan=2)
plt.subplot2grid((3, 3), (2, 0))
plt.subplot2grid((3, 3), (2, 1))
plt.savefig('subplot2gridEx', bbox_inches='tight')
plt.show()

在这里插入图片描述

matplotlib.gridspec

matplotlib下的一个类,用于指明绘制子区域的设计,与subplot结合使用,用gridspec.GridSpec对象代替比如subplot(222)中的222。

实例:

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

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])
ax5 = plt.subplot(gs[2, 1])


plt.show()

可以达到相同的效果

一些绘图实例

funcsimagefuncsimage
boxplot箱形图contour等值图
bar条形图lines垂直图
barh横向条形图stem柴火图
polar极坐标图scatter散点图
pie饼状图cohereX-Y相关性函数图
psd功率谱密度图plot_date数据日期图
specgram谱图

饼状图

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)
plt.axis('equal')
plt.show()

在这里插入图片描述

一些参数解释:

argscomment
explode突出的比例
autopct饼中串的字符
startangle起始角度,笛卡尔坐标系
shadow是否有阴影

还有直方图,极坐标图等,就像matlab中的stem,stairs等图,等到用的时候再查资料就好了,没必要细看,反正也记不住。学习嘛,功利一些。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明光桥北修狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值