数据分析系列章节(二):matplotlib

1.import struct库

1.1 struct模块:

在Python中,『一切皆对象』,基本数据类型也不列外
C语言的数组int a[3] = {1, 2, 4};存储的是真正的值
Python的列表list = [1, 2, 4],存储的是元素的指针

1.2 pack(),unpack()函数:

      由于计算机是用二进制来存储和处理数字,不能精确表示浮点数,而JavaScript中没有相应的封装类来处理浮点数运算,直接计算会导致运算精度丢失。struct模块最重要的两个函数就是pack()、unpack()方法:打包函数:pack(fmt, v1, v2, v3, …);解包函数:unpack(fmt, buffer),其中,fmt是格式字符(format的谐音),struct模块支持的格式化字符如下表

2.matplotlib库

    在python的matplotlib库中分别可用bar、barh、plot函数来构建它们,再使用xticks与yticks(设置坐标轴刻度)、xlabel与ylabel(设置坐标轴标签)、title(标题)、legend(图例)、xlim与ylim(设置坐标轴数据范围)、grid(设置网格线)等命令来装饰图形

2.1导入库文件

    from matplotlib import pyplot as plt
    import numpy as np

2.2 简单figure图像生成案例:
# 使用import导入模块matplotlib.pyplot,并简写成plt 使用import导入模块numpy,并简写成np
from matplotlib import pyplot as plt
import numpy as np
import matplotlib

# 使用np.linspace定义x:范围是(-1,1);个数是50
x = np.linspace(-1, 1, 50)
# 函数y=x^3
y = x ** 3
y1 = x ** 2
# 使用plt.figure定义一个图像窗口.num代表图像窗口编号,figsize表示窗口大小
plt.figure(num=3, figsize=(8, 5), )

# 使用plt.plot画(x ,y1)曲线,曲线的颜色属性(color)为红色;
# 曲线的宽度(linewidth)为1.0;曲线的类型(linestyle)为虚线. 使用plt.show显示图像

plt.plot(x, y1, color='red', linewidth='1.0', linestyle='--')
# 使用plt.plot画(x ,y1)曲线.
plt.plot(x, y)
# 展示绘制图像
plt.show()
2.3坐标轴以及line:
2.3.1 设置坐标轴不同的名字、刻度以及范围:
# 使用plt.xlim设置x坐标轴范围:(-2, 2)
plt.xlim((-2,2))
# 使用plt.ylim设置x坐标轴范围:(-2, 2)
plt.ylim((-2,2))
# 定义x轴名称
plt.xlabel('x轴')
# 定义y轴名称
plt.ylabel('y轴')

new_ticks = np.linspace(-2, 2, 5)
print(new_ticks)
# 使用plt.xticks设置x轴刻度:范围是(-2,2);个数是8.
plt.xticks(new_ticks)

# 使用plt.yticks设置y轴刻度以及名称:刻度为[-2, -1.8, -1, 1.22, 3]
# 对应刻度的名称为[‘really bad’,’bad’,’normal’,’good’, ‘really good’]
plt.yticks([-2, -1.8, -1, 1.22, 2],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])
2.3.2 坐标轴移至中心:
"""
plt.gca获取当前坐标轴信息. 使用.spines设置边框;使用.set_color设置边框颜色
"""
# 坐标轴中移:
ax = plt.gca()
# 隐藏上边和右边
ax.spines['top'].set_color('none')
ax.spines['right'].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))
2.3.3 图例legend
# set line syles
l1, = plt.plot(x, y1, label='linear line')
l2, = plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')
# legend将要显示的信息来自于上面代码中的 label(表示图例的名称). 所以我们只需要简单写下一下代码, plt 就能自动的为我们添加图例.
# 图例展示
plt.legend(loc='upper right') # loc属性表示图例放置位置:upper,right,bottom,left
2.3.4 annotate标注
# 标注具体某点
x0 = 0.5
y0 = x0**2
plt.plot([x0, x0,], [0, y0,], 'k--', linewidth=2.5)
# set dot styles
plt.scatter([x0, ], [y0, ], s=50, color='b')

# 注释annotate,对(x0,y0)这个点进行标注
plt.annotate(r'$x**2=%s$' % x0, xy=(x0, y0), xycoords='data', xytext=(+10, -10),
             # xytext=(+10, -10) 和 textcoords='offset points' 对于标注位置的描述 和 xy 偏差值
             textcoords='offset points', fontsize=10,
             arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))

matplotlib的颜色及线条控制(linestyle,color)

linestyle:


'-'       solid line style
'--'      dashed line style
'-.'      dash-dot line style
':'       dotted line styl

color:【参考此篇文章】

多图分区展示

语法格式:subplot(a,b,c)表示a行,b列,第c个图像区域

from matplotlib import pyplot as plt
import numpy as np

# 规则图形:

# 创建一个图形窗口
plt.figure()
# subplot(m,n,x):代表创建m*n个小图,x代表第i个图
plt.subplot(2, 2, 1)
# 绘制折线图
x = [1, 2, 3, 4, 5, 6]
y = [3, 5, 7, 8, 1, 2]
plt.plot(x, y)

# plt.subplot(2,2,2)表示将整个图像窗口分为2行2列, 当前位置为2
plt.subplot(2, 2, 2)
data = np.arange(1, 4, .25)
plt.scatter(data, data)

# plt.subplot(2,2,3)表示将整个图像窗口分为2行2列,当前位置为3
plt.subplot(223)
plt.plot([0, 1], [0, 3])

# plt.subplot(2,2,4)表示将整个图像窗口分为2行2列,当前位置为4
plt.subplot(2, 2, 4)
plt.plot([0, 1], [3, 3])

plt.show()

plt.text()给图形添加数据标签

import matplotlib.pyplot as plt
import numpy as np
#创建带数字标签的直方图
numbers = list(range(1,11))
#np.array()将列表转换为存储单一数据类型的多维数组
x = np.array(numbers)
y = np.array([a**2 for a in numbers])
plt.bar(x,y,width=0.5,align='center',color='c')
plt.title('Square Numbers',fontsize=24)
plt.xlabel('Value',fontsize=14)
plt.ylabel('Square of Value',fontsize=14)
plt.tick_params(axis='both',labelsize=14)
plt.axis([0,11,0,110])
for a,b in zip(x,y):
    # 用%.2f保留两位小数,横向居中对齐ha='center',纵向底部(顶部)对齐va='bottom'
    plt.text(a,b+0.1,'%.2f'%b,ha = 'center',va = 'bottom',fontsize=7)
plt.savefig('images\squares.png')
plt.show()

    首先,前边设置的x、y值其实就代表了不同柱子在图形中的位置(坐标),通过for循环找到每一个x、y值的相应坐标——a、b,再使用plt.text在对应位置添文字说明来生成相应的数字标签,而for循环也保证了每一个柱子都有标签。其中,a+0.5, b+0.05(表示位置高度)表示在每一柱子对应x值、y值上方0.05处标注文字说明,’%.2f’ % b,代表标注的文字,即每个柱子对应的y值,其中0表示不显示小数后面的数值,1就表示显示小数后面一位,以此类推; ha=‘center’, va= 'bottom’代表horizontalalignment(水平对齐)、verticalalignment(垂直对齐)的方式,fontsize则是文字大小。条形图、折线图也是如此设置,饼图则在pie命令中有数据标签的对应参数。对于累积柱状图、双轴柱状图则需要用两个for循环,同时通过a与b的不同加减来设置数据标签位置。

3.图形

未完待续:
-3.1 散点图
-3.2 柱形图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值