数据分析
数据分析流程
1.提出问题
2.准备数据
3.分析数据
4.获得结论
5.成果可视化
matplotlib
什么是matplotlib
matplotlib:最流行的python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿MATLAB构建。
axis轴,指的是x或者y这种坐标轴
假设一天中每隔两个小时(range(2,26,2))的气温(℃)分别[15,13,14.5,17,20,25,26,26,27,22,18,15]
from matplotlib import pyplot as plt
x=range(2,26,2)
#数据在x轴的位置,是一个可迭代对象
y=[15,13,14.5,17,20,25,26,26,27,22,18,15]
plt.plot(x,y)
plt.xticks(range(2,25))
plt.show()
运行结果:可以看出并不美观,也不太直观
目前存在以下几个问题:
- 设置图片大小(想要一个高清无码大图)
- 保存到本地
- 描述信息,比如x轴和y轴表示什么,这个图表示什么
- 调整x或者y的刻度的间距
- 线条的样式(比如颜色,透明度等)
- 标记出特殊的点(比如告诉别人最高点和最低点在哪里)
- 给图片添加一个水印(防伪,防止盗用)
import matplotlib.pyplot as plt
fig=plt.figure(figsize=(20,8),dpi=80)
#figure图形图标的意思,在这里指我们画的图
#通过实例化一个figure并且传递参数,能够在后台自动使该figure实例
#在图像模糊的时候可以传入dpi参数,让图片更加清晰
x=range(2,26,2)
y=[15,13,14.5,17,20,25,26,26,24,22,18,15]
plt.plot(x,y)
plt.savefig("保存路径")
plt.show()
x/y轴刻度太稀疏了怎么办?
from matplotlib import pyplot as plt
fig=plt.figure(figsize=(20,8),dpi=80)
x=range(2,26,2)
#数据在x轴的位置,是一个可迭代对象
y=[15,13,14.5,17,20,25,26,26,27,22,18,15]
plt.plot(x,y)
plt.xticks(range(2,25))
plt.yticks(range(min(y),max(y)+1))
plt.show()
如何将x/y轴变稀疏?将步长变长
那么问题来了: 如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况? a= [random.randint(20,35) for i in range(120)]
from matplotlib import pyplot as plt
import random
plt.figure(figuresize=(20,8),dpi=80)
x=range(0,120)
y=[random.randint(20,35) for i in range(120)]
plt.plot(x,y)
plt.show()
调整x轴刻度
from matplotlib import pyplot as plt
import random
plt.figure(figsize=(20,8),dpi=80)
x=range(0,120)
y=[random.randint(20,35) for i in range(120)]
plt.plot(x,y)
#调整x轴刻度
_x=list(x)
_xtick_labels=["10点()分".format(i) for i in range(60)]
_xtick_labels+=["11点()分".format(i) for i in range(60)]
#_x的位置对应_xtick_label
plt.xticks(_x[::3],_xtick_labels[::3],rotation=270)
plt.show()
为什么不显示中文?
matplotlib默认不支持中文字符,因为默认的英文字体无法显示汉字。
那么问题来了:如何修改matplotlib的默认字体?
通过matplotlib.rc可以修改,具体方法参见源码(windows/linux)
通过matplotlib 下的font_manager可以解决(windows/linux/mac)
from matplotlib import pyplot as plt
import random
import matplotlib
from matplotlib import font_manager
plt.figure(figsize=(20,8),dpi=80)
#第一种方法大多无效,可自行尝试
#windows和linux
#font=('family':'Microsoft YaHei',
# 'weight':'bold',
# 'size':'larger')
#matplotlib.rc("font",**font)
#matplotlib.rc("fonr",family='Mcrosoft YaHei',weight="blod")
#
my_font=font_manager.FontProperties(fname="C:/Windows/Fonts/simhei.ttf")
x=range(0,120)
y=[random.randint(20,35) for i in range(120)]
plt.plot(x,y)
#调整x轴刻度
_x=list(x)
_xtick_labels=["10点{}分".format(i) for i in range(60)]
_xtick_labels+=["11点{}分".format(i) for i in range(60)]
#_x的位置对应_xtick_label
plt.xticks(_x[::3],_xtick_labels[::3],rotation=270,fontproperties=my_font)
#添加描述信息
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("温度 单位(℃)",fontproperties=my_font)
plt.title("10点到12点每分钟的气温变化情况",fontproperties=my_font)
plt.show()