Matplotlib基本使用

不穿秋裤的南方人    2018-06-10 17:05

一、基础应用

# 1.导入模块
import matplotlib.pyplot as plt
import numpy as np

# 2.生成数据,使用np.linspace定义x:范围[-3,3],个数50。仿真一维数据组(x,y)表示曲线1
x = np.linspace(-3,3,50)
y = 2*x +1

# 3.使用plt.figure定义一个图像窗口,使用plt.plot画(x,y)曲线,使用plt.show显示图像
plt.figure()
plt.plot(x, y)
plt.show()

二、figure图像

matplotlib的figure就是一个单独的figure小窗口,程序中可以生成多个小窗口,小窗口里也可以画多条线

# 1.导入模块
import matplotlib.pyplot as plt
import numpy as np

# 2.生成数据。仿真一维数据组(x,y1)表示曲线1,仿真一维数据组(x,y2)表示曲线2
x = np.linspace(-3,3,50)
y1 = 2*x +1
y2 = x**2

# 3.定义一个图像窗口,使用plt.plot画(x,y1)曲线
plt.figure()
plt.plot(x, y1)

# 4.定义一个图像窗口:编号为3,大小为(8,5)。使用plt.plot画(x,y2)曲线;使用plt.plot画(x,y1)曲线,曲线颜色(color)为红色,曲线宽度(linewidth)为1.0,曲线类型(linestyle)为虚线
plt.figure(num=3, figsize=(8, 5))
plt.plot(x, y2)
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')

# 5.使用plt.show()显示图像
plt.show()

三、设置坐标轴(调整名字和间隔)

# 1.导入模块
import matplotlib.pyplot as plt
import numpy as np

# 2.生成数据
x = np.linspace(-3,3,50)
y1 = 2*x +1
y2 = x**2

# 3.定义窗口,画曲线
plt.figure()
plt.plot(x, y2)
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')

# 4.plt.xlim设置x坐标轴范围:(-1, 2),plt.ylim设置y坐标轴范围:(-2, 3);plt.xlabel设置x坐标轴名称:'I am x';plt.ylabel设置y坐标轴名称:'I am y'
plt.xlim((-1, 2))
plt.ylim((-2, 3))
plt.xlabel('I am x')
plt.ylabel('I am y')

# 5.np.linspace定义新范围,plt.xticks设置x轴刻度,plt.yticks设置y轴刻度以及名称
new_ticks = np.linspace(-1, 2, 5)
print(new_ticks)
plt.xticks(new_ticks)
plt.yticks([-2, -1.8, -1, 1.22, 3], [r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])

# 6.显示图像
plt.show()

四、设置坐标轴(调整坐标轴)

# 1.导入模块
import matplotlib.pyplot as plt
import numpy as np

# 2.生成数据
x = np.linspace(-3,3,50)
y1 = 2*x +1
y2 = x**2

# 3.定义窗口,画曲线
plt.figure()
plt.plot(x, y2)
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')

# 4.plt.xlim设置x坐标轴范围:(-1, 2),plt.ylim设置y坐标轴范围:(-2, 3);plt.xlabel设置x坐标轴名称:'I am x';plt.ylabel设置y坐标轴名称:'I am y'
plt.xlim((-1, 2))
plt.ylim((-2, 3))
plt.xlabel('I am x')
plt.ylabel('I am y')

# 5.np.linspace定义新范围,plt.xticks设置x轴刻度,plt.yticks设置y轴刻度以及名称
new_ticks = np.linspace(-1, 2, 5)
print(new_ticks)
plt.xticks(new_ticks)
plt.yticks([-2, -1.8, -1, 1.22, 3], [r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])


# 6.plt.gca获取当前坐标轴信息,.spines设置边框,.set_color设置边框颜色,.set_position设置边框位置(位置所有属性: outward,axes,data),.xaxis.set_ticks_position设置x坐标刻度数字或名称的位置
# gca = 'get current axis'
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data', 0))   # outward, axes
ax.spines['left'].set_position(('data', 0))

# 7.显示图像
plt.show()

五、Legend图例

matplotlib中的legend图例是帮我们展示出每个数据对应的图像名称

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3,3,50)
y1 = 2*x +1
y2 = x**2

plt.figure()

plt.xlim((-1, 2))
plt.ylim((-2, 3))

new_ticks = np.linspace(-1, 2, 5)
plt.xticks(new_ticks)
plt.yticks([-2, -1.8, -1, 1.22, 3], [r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])

# set line style,legend将要显示的信息来自于线的label属性
l1, = plt.plot(x, y1, label='linear line')
l2, = plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')
# 调用legend即可显示在图中添加图例,loc表示图例添加的位置
# plt.legend(loc='upper right')
# 若想修改之前的label信息,另一种方式是在plt.legend中输入更多参数,但需要确保保存之前plt.plot()返回列表中的值,这样就可以重新设置线条对应的label了
plt.legend(handles=[l1, l2,], labels=['up', 'down'], loc='best')

plt.show()

六、Annotation标注

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y = 2 * x + 1

plt.figure(num=1, figsize=(8,5))
plt.plot(x, y)

ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))

x0 = 1
y0 = 2 * x0 + 1
# 标注出点(x0, y0)的位置信息
plt.scatter(x0, y0, s=50, color='b')
# 画出一条垂直于x轴的虚线
plt.plot([x0, x0], [y0, 0], 'k--', lw=2.5)

# method1 添加注释annotate
# 参数xycoords='data'表示基于数据的值来选位置,xytext和textcoords表示对于标注位置的描述和xy偏差值,arrowprops是对图中箭头类型的一些设置
plt.annotate(r'$2x+1=%s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=.2'))

# method2 添加注释text
# -3.7,3是选取text的位置,fontdict设置文本字体
plt.text(-3.7, 3, r'$This\ is\ the\ some\ text.\ \mu\ \sigma_i\ \alpha_t$', fontdict={'size': 16, 'color': 'r'})

plt.show()

七、tick能见度

图片中内容较多时,会造成相互遮盖,可以通过设置相关内容的透明度来使得图片易于观察

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y = 0.1 * x

plt.figure()
plt.plot(x, y, linewidth=10, zorder=1)
plt.ylim(-2, 2)

ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))

# 对被遮挡的图像调节相关透明度
# label.set_fontsize重新调节字体大小,bbox设置目的内容的透明度相关参数,facecolor调节box前景色,edgecolor设置边框,alpha设置透明度(越接近0越透明,越接近1越不透明)
for label in ax.get_xticklabels() + ax.get_yticklabels():
    label.set_fontsize(12)
    label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.7, zorder=2))

plt.show()

Views: 1.8K

[[total]] comments

Post your comment
  1. [[item.time]]
    [[item.user.username]] [[item.floor]]Floor
  2. Click to load more...
  3. Post your comment