Matpoltlib学习笔记(一):可视化与绘图基础

Matplotlib学习笔记

  • 一、折线图
    • 误差折线图 plt.errorbar()
  • 二、二维图形 Patches
    • 1.直方图
    • 2.柱状图
    • 3.饼状图
    • 4.imshow()
  • 三、子图
    • 1.plt.subplots()

一、折线图

(折线图的基础绘制方法与函数参数等内容直接跳过,下面为对于原有知识的补充。)

误差折线图 plt.errorbar()

matplotlib.pyplot.errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, elinewidth=None, capsize=None, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, *, data=None, **kwargs)

主要参数简介:

x: 需要绘制的line中点的在x轴上的取值

y: 需要绘制的line中点的在y轴上的取值

yerr: 指定y轴水平的误差

xerr: 指定x轴水平的误差

fmt: 指定折线图中某个点的颜色,形状,线条风格,例如‘co–’

ecolor: 指定error bar的颜色

elinewidth: 指定error bar的线条宽度

fig = plt.figure()
x = np.arange(10)
y = 2.5 * np.sin(x / 20 * np.pi)
yerr = np.linspace(0.05, 0.2, 10)
plt.errorbar(x, y + 3, yerr=yerr, label='both limits (default)');

Matpoltlib学习笔记(一):可视化与绘图基础_第1张图片

二、二维图形 Patches

1.直方图

matplotlib.pyplot.hist(x,bins=None,range=None, density=None, bottom=None, histtype='bar', align='mid', log=False, color=None, label=None, stacked=False, normed=None)

主要参数简介:
x: 数据集,最终的直方图将对数据集进行统计

bins: 统计的区间分布

range: tuple, 显示的区间,range在没有给出bins时生效

density: bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density

histtype: 可选{'bar', 'barstacked', 'step', 'stepfilled'}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似

align: 可选{'left', 'mid', 'right'}之一,默认为'mid',控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认

log: bool,默认False,即y坐标轴是否选择指数刻度

stacked: bool,默认为False,是否为堆积状图

x=np.random.randint(0,100,100) #生成[0-100)之间的100个数据,即 数据集 
bins=np.arange(0,101,10) #设置连续的边界值,即直方图的分布区间[0,10),[10,20)... 
plt.hist(x,bins,color='fuchsia',alpha=0.5)#alpha设置透明度,0为完全透明 
plt.xlabel('scores') 
plt.ylabel('count') 
plt.xlim(0,100); #设置x轴分布范围 plt.show()

Matpoltlib学习笔记(一):可视化与绘图基础_第2张图片

2.柱状图

matplotlib.pyplot.bar(left, height, alpha=1, width=0.8, color=, edgecolor=, label=, lw=3)

主要参数简介:
left: x轴的位置序列,一般采用range函数产生一个序列,但是有时候可以是字符串

height: y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据;

alpha: 透明度,值越小越透明

width: 为柱形图的宽度,一般这是为0.8即可;

color或facecolor: 柱形图填充的颜色;

edgecolor: 图形边缘颜色

label: 解释每个图像代表的含义,这个参数是为legend()函数做铺垫的,表示该次bar的标签

# bar绘制柱状图
y = range(1,17)
plt.bar(np.arange(16), y, alpha=0.5, width=0.5, color='yellow', edgecolor='red', label='The First Bar', lw=3);

Matpoltlib学习笔记(一):可视化与绘图基础_第3张图片

3.饼状图

plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)

主要参数简介:
x: 契型的形状,一维数组。

explode: 如果不是等于None,则是一个len(x)数组,它指定用于偏移每个楔形块的半径的分数。

labels: 用于指定每个契型块的标记,取值是列表或为None

colors: 饼图循环使用的颜色序列。如果取值为None,将使用当前活动循环中的颜色。

startangle: 饼状图开始的绘制的角度。

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10] 
explode = (0, 0.1, 0, 0) 
fig1, ax1 = plt.subplots() 
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90) 
ax1.axis('equal')

Matpoltlib学习笔记(一):可视化与绘图基础_第4张图片)

4.imshow()

matplotlib.pyplot.imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=, filternorm=1, filterrad=4.0, imlim=, resample=None, url=None, *, data=None, **kwargs)

使用imshow画图时首先需要传入一个数组,数组对应的是空间内的像素位置和像素点的值,interpolation参数可以设置不同的差值方法,具体效果如下。

methods = [None, 'none', 'nearest', 'bilinear', 'bicubic', 'spline16',
           'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quadric',
           'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos']


grid = np.random.rand(4, 4)

fig, axs = plt.subplots(nrows=3, ncols=6, figsize=(9, 6),
                        subplot_kw={'xticks': [], 'yticks': []})

for ax, interp_method in zip(axs.flat, methods):
    ax.imshow(grid, interpolation=interp_method, cmap='viridis')
    ax.set_title(str(interp_method))

plt.tight_layout();

Matpoltlib学习笔记(一):可视化与绘图基础_第5张图片

三、子图

1.plt.subplots()

参数简介:

figsize 参数可以指定整个画布的大小

sharexsharey 分别表示是否共享横轴和纵轴刻度

tight_layout 函数可以调整子图的相对大小使字符不会重叠

fig, axs = plt.subplots(2, 5, figsize=(10, 4), sharex=True, sharey=True)
fig.suptitle('样例1', size=20)
for i in range(2):
    for j in range(5):
        axs[i][j].scatter(np.random.randn(10), np.random.randn(10))
        axs[i][j].set_title('第%d行,第%d列'%(i+1,j+1))
        axs[i][j].set_xlim(-5,5)
        axs[i][j].set_ylim(-5,5)
        if i==1: axs[i][j].set_xlabel('横坐标')
        if j==0: axs[i][j].set_ylabel('纵坐标')
fig.tight_layout()

Matpoltlib学习笔记(一):可视化与绘图基础_第6张图片
上述过程是基于subplots()函数的写法,我们还可以基于subplot()进行定义:

plt.figure()
# 子图1
plt.subplot(2,2,1) 
plt.plot([1,2], 'r')
# 子图2
plt.subplot(2,2,2)
plt.plot([1,2], 'b')
#子图3
plt.subplot(224)  # 当三位数都小于10时,可以省略中间的逗号,这行命令等价于plt.subplot(2,2,4) 
plt.plot([1,2], 'g');

Matpoltlib学习笔记(一):可视化与绘图基础_第7张图片
此外,我们也可以建立极坐标系

N = 150
r = 2 * np.random.rand(N)
theta = 2 * np.pi * np.random.rand(N)
area = 200 * r**2
colors = theta


plt.subplot(projection='polar')
plt.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha=0.75);

Matpoltlib学习笔记(一):可视化与绘图基础_第8张图片
以上便是本人在有关Matplotlib中可视化与绘图基础的学习中的全部内容。如果您在阅读过程中发现了本文的不足或者错误,请您在下方留言以批评指正,本人一定及时修改。感谢您阅读本文!

你可能感兴趣的:(Matplotlib绘图,学习,matplotlib,python)