目录
一.数据分析的介绍
二.jupyter和conda的使用
三.matplotlib的基础绘图
四.matplotlib的基础绘图和调整x轴的刻度
五.matplotlib设置显示中文
六.matplotlib添加描述信息
七.matplotlib绘制网格和标注多条折线图
1.学习数据分析的原因
(1).岗位需求
(2).python数据科学的基础
(3).机器学习课程的基础
2.数据分析的定义
数据分析是用适当的方法对收集的大量数据进行分析,帮助人们作出判断,以便采取适当的行动。
3.数据分析的流程
提出问题准备数据(数据清洗)分析数据获得结论(成果可视化)
1.conda环境安装
创建环境:conda create
切换环境:windows:activate python3
linux/macos:source activate python3
2.jupyter notebook:一款编程/文档/笔记/展示软件
1.学习matplotlib的原因
(1)使数据可视化,更直观的呈现
(2)使数据更加客观、更具说服力
2.matplotlib的定义
matplotlib:主要用来实现图表的可视化,仿照matlab,是python的绘图库
3.matplotlib基本要点
asix轴,指的是x或y轴。
#导入pyplot,注意文件名不可写成matplotlib
from matplotlib import pyplot as plt
x=range(2,26,2)
y=[15,13,14.5,17,20,25,26,26,24,22,18,15]
#绘图
plt.plot(x,y)
#展示图形
plt.show()
1.设置图片大小:fig=plt.figure(figsize=(*,*),dpi=*) (*为设置的具体数字)
其中,figsize:图片大小,长和宽,dpi:每英寸上面点的个数,代表清晰程度
2.保存图片:plt.savefig('./t1.png') 保存到当前目录
ps:保存为svg这种矢量图格式,放大不会有锯齿
3.调整x轴刻度:plt.xticks(range(2,50,a)) (a为每个刻度之间的距离,必须为整数)
ps:如果想要设置更小的步长(即更密集)
_xtick_labels=[i/2 for i in range(4,49)]
plt.xticks(_xtick_labels) or plt.xticks(_xtick_labels[::3])
同理y轴的刻度,但是range()里面就要取min(y)和max(y)+1
#coding=utf-8
from matplotlib import pyplot as plt
#设置图片大小
#figsize:图片大小,长和宽,dpi:每英寸上面点的个数,代表清晰程度
'''fig=plt.figure(figsize=(20,8),dpi=80)
x=range(2,26,2)
y=[15,13,14.5,17,20,25,26,26,24,22,18,15]'''
#绘图
plt.plot(x,y)
#设置x轴的刻度
_xtick_labels=[i/2 for i in range(4,49)] #变得更密集
plt.xticks(_xtick_labels[::3])
#设置y轴的刻度
plt.yticks(range(min(y),max(y)+1))
#图片的保存
plt.savefig('./t1.png') #ps:保存为svg这种矢量图格式,放大不会有锯齿
#展示图形
plt.show()
matplotlib默认不支持中文字符,因为默认的英文字体无法显示汉字
fc-list 查看支持的字体
fc-list :lang=zh 查看支持的中文(冒号前面有空格)
修改matplotlib默认字体:
(1)通过matplotlib.rc可以修改(windows/linux)
ps:以下代码用三个单引号注释是为了方便大家看设置字体的方法,实际放到python中运行需要去掉注释符。
import random
from matplotlib import pyplot as plt
import matplotlib
matplotlib.rc("font",family='SimHei') #设置字体
'''x=range(0,120)
y=[random.randint(20,35) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80) #设置大小
plt.plot(x,y)
_x=list(x)
_xtick_labels=['10点{}分'.format(i) for i in range(60)]
_xtick_labels+=['11点{}分'.format(i-60) for i in range(60,120)]
#_x取了步长,所以_xtick_labels也要取步长,即数字和字符串一一对应,rotation指的是旋转的度数
plt.xticks(_x[::3],_xtick_labels[::3],rotation=45)
#添加描述信息
plt.xlabel('时间')
plt.ylabel('温度 单位(℃)')
plt.title('10点-12点每分钟的气温变化情况')
plt.show()'''
ps:可通过以下代码来查询系统的所有字体
from matplotlib.font_manager import FontManager
import subprocess
mpl_fonts = set(f.name for f in FontManager().ttflist)
print('all font list get from matplotlib.font_manager:')
for f in sorted(mpl_fonts):
print('\t' + f)
(2)通过matplotlib下的font_manager可以解决(windows/linux/mac)
ps:以下代码用三个单引号注释是为了方便大家看设置字体的方法,实际放到python中运行需要去掉注释符。
import random
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname='系统的字体路径') #系统的字体路径这块我的电脑不太好使,根据个人电脑而定
'''x=range(0,120)
y=[random.randint(20,35) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80) #设置大小
plt.plot(x,y)
#调整x轴的刻度
_x=list(x)[::10]
_xtick_labels=['hello,{}'.format(i) for i in _x] #将字符串与数字对应
_x=list(x)
_xtick_labels=['10点{}分'.format(i) for i in range(60)]
_xtick_labels+=['11点{}分'.format(i-60) for i in range(60,120)]'''
#_x取了步长,所以_xtick_labels也要取步长,即数字和字符串一一对应,rotation指的是旋转的度数
plt.xticks(_x[::3],_xtick_labels[::3],rotation=45,fontproperties=my_font)
#添加描述信息
plt.xlabel('时间',fontproperties=my_font)
plt.ylabel('温度 单位(℃)',fontproperties=my_font)
plt.title('10点-12点每分钟的气温变化情况',fontproperties=my_font)
plt.show()
(3)通过plt.rcParams手动设置
ps:以下代码用三个单引号注释是为了方便大家看设置字体的方法,实际放到python中运行需要去掉注释符。
import random
from matplotlib import pyplot as plt
'''x=range(0,120)
y=[random.randint(20,35) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80) #设置大小
plt.plot(x,y)
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False #这两行需要手动设置
#调整x轴的刻度
_x=list(x)[::10]
_xtick_labels=['hello,{}'.format(i) for i in _x] #将字符串与数字对应'''
'''_x=list(x)
_xtick_labels=['10点{}分'.format(i) for i in range(60)]
_xtick_labels+=['11点{}分'.format(i-60) for i in range(60,120)]
#_x取了步长,所以_xtick_labels也要取步长,即数字和字符串一一对应,rotation指的是旋转的度数
plt.xticks(_x[::3],_xtick_labels[::3],rotation=45)
#添加描述信息(如果是第一种和第三种方法,在添加描述信息时不需要再添加代码)
plt.xlabel('时间')
plt.ylabel('温度 单位(℃)')
plt.title('10点-12点每分钟的气温变化情况')
plt.show()'''
通过.xlabel添加横坐标信息,.ylabel添加纵坐标信息,.title()添加标题信息,代码见上“五.matplotlib设置显示中文”。
(1)plt.grid(alpha=0.1) ,其中alpha表示网格线的透明度
(2)先使用label,再使用plt.legend()来标注多条折线图,通过loc来设置图例的位置,如: plt.legend(loc='upper left')设置。
ps:通过color''来设置线条颜色,通过linestyle来设置线条风格,通过linewidth来设置线条宽度。
小练习:统计小明和小宋从11岁到30岁每年交的女(男)朋友的数量情况。y轴表示个数,x轴表示岁数,如11岁,12岁等。
import matplotlib
from matplotlib import pyplot as plt
matplotlib.rc("font",family='SimHei')
'''x=range(11,31)
y_1=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_2=[1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
plt.figure(figsize=(20,8),dpi=80)'''
plt.plot(x,y_1,label='小明',color='orange',linestyle=':',linewidth=5)
plt.plot(x,y_2,label='小宋',color='cyan',linestyle='-.',linewidth=5)
'''_x=list(x)
_xlabels=['{}岁'.format(i) for i in range(11,31)]
plt.xticks(_x,_xlabels,rotation=45)'''
#添加网格线
plt.grid(alpha=0.5,linestyle=':') #alpha为网格线的透明度
'''plt.xlabel('岁数')
plt.ylabel('个数')
plt.title('从11岁到30岁每年交的女(男)朋友的数量')'''
#添加图例
plt.legend(loc='upper left') #图例在左上角
#展示
plt.show()