第 4 章是讲用matplotlib画图
期待已久的内容,用可视化展示数据比丢一张数据表给他好的多,在建模的时候先画个图会清晰不少,下面进入正题:
数据源:当然是上一章最后一节的提取了小时的sougou数据
第一节:保存
就是教你怎么保存画的图,然后再打开它。
保存:fig.savefig('myfigure.png')
打开:Image('myfigure.png') 执行打开的时候要先加载一个包: from IPython.display import Image
第二节:画2个图的方法
-- matlab风格
plt.figure()
plt.subplot(2,1,1)
plt.plot(df.ranks,df.numbers)
plt.subplot(2,1,2)
plt.plot(df.numbers, df.ranks)
-- 面向对象画图
fig,ax = plt.subplots(2)
ax[0].plot(df['rank'],df.hours)
ax[1].plot(df['number'],df.hours)
第 3 节:简易线型图
先设置fig, ax。 fig是一个可以装图形、文字的容器;ax是带有刻度和标签的矩形。设置好之后再用ax.plot画图
fig = plt.figure()
ax = plt.axes()
ax.plot(df['number'],df['rank'])
-- 穿插一个小插曲:在用sogou数据画图的时候,出现这个提示:
ValueError: x and y must have same first dimension, but have shapes (1,) and (823818,) 用df.rank查看数据时,出现的是多列数据,而不是一列,所以画图的时候出现了x,y没有相同的坐标。
晚上问的大神,他说你先用df['rank']试下能不能正常显示,结果是正常的。那可能是df.rank是调用了内置函数,以后用中括号就可以了。
-- 线条的颜色、风格
color = '' 颜色支持英文、代码、灰度、16进制、RGB、HTML颜色
linestyle = '' 线条的样式,比如---.:等
df.groupby('hours')['hours'].count().plot(color = 'g',linestyle = ':')
-- 设置坐标轴上下限
有两种方法,效果是一样的
#设置 x, y 轴的起始值
df.groupby('hours')['hours'].count().plot(color = 'g',linestyle = ':')
plt.xlim(0,30) #只能设置范围,不能规定跨度
plt.ylim(10000,100000)
#方法2:
df.groupby('hours')['hours'].count().plot(color = 'g',linestyle = ':')
plt.axis([0,25,0,120000]) # plt.axis('')有很其他的功能,可以查看文档
显示图例
图例是label,设置好图例后要用plt.legend()才能打印图例
df.groupby('hours')['rank'].sum().plot(color = 'r',linestyle = ':',label="The red data")
df.groupby('hours')['hours'].count().plot(color = 'g',label = "search/hour")
plt.legend() # legend(lable = ['',''], loc = '') label是图例的名称,同上;loc是图例的位置