数据分析师的学习之路-pandas篇(3)

继续接上篇,这次学习一下怎么画各种图

3.7 画图

画图就要用另一个常用的库:matploblib里的pyplot
所以,这下前面导入库时都要加上这两句了

import pandas as pd
import matplotlib.pyplot as plt #依然取个别名,后面使用起来短一些

后面学习每个图的画法,主要学习它的使用逻辑,例子只是个例子,不用纠结具体表格数据。

3.7.1 柱状图

还是先读一个excel文件进来,假设是个学生专业领域的数量统计

#读文件数据,并设置ID为index, students现在是个dataFrame
students.pd.read_excel("C:/temp/1.xslx", index_col='ID')

有了pyplot库,画柱状图就很简单了,直接调用这个方法:

students.plot.bar(x="field", y="Number")
plt.show()#显示图

就这么简单,调用plot.bar的方法,就是画柱状图,参数x就是X轴要用哪列,y就是Y轴,值就是列名。最后plt.show(),就是会弹出窗口显示这个图。
当然了这是最基本的,肯定还得有操作空间才行,比如想显示的好看,从大到小排个序,其实就是上篇文章提到的sort_values方法了:

#这样出来的图就是按Number列的大小排序了,ascending参数控制从大到小还是从小到大。
students.sort_values(by='Number', inplace=True, ascending=False)

默认的话现在每个柱子都是不同颜色,看着有点乱,那就在画的时候加个颜色参数就好了:

#这样出来的柱子就是设定的那一个颜色了。
students.plot.bar(x="filed", y="Number", color="orange")

如果横轴的lable标签显示的文字有些很长,会被截断,显示不全怎么办,那就在显示图之前,设一个紧凑型布局:

plt.tight_layout()#紧凑型布局,解决标签文字被截断的问题
plt.show()

如果还想给整个图加个标题,还是在画图的时候加参数:

students.plot.bar(x="filed", y="Number", color="orange", title="我是标题")

如果还想对样式再优化,比如设置字号粗细等,plot.bar这个就搞不定了,直接用pyplot的方法来搞:

#用pyplot的方法直接画柱状图,参数传入dataframe(例子中的students)的列名作为XY轴
plt.bar(students.filed, students.Number,color='orange')
#x轴的标签值横着写写不下,就垂直写,用xticks方法,参数旋转90度
plt.xticks(students.filed, rotation='90')
#给X轴和Y轴加个标题
plt.xlable("Field")
plt.ylable("Number")
#给整体图加个标题,并且设置字号
plt.title('我是标题', fontsize='16')
#最后显示
plt.tight_layout()
plt.show()

上面的柱状图,每个X对应的就是一个柱子,那么想弄两个柱子或更多呢?
比如,还是这个例子,每个学生专业领域都有多少数量,数量分别记录的是2016年和2017年的,数据表大概长这样,Field列,两个年份列:
在这里插入图片描述
最终图长这样:
在这里插入图片描述
看图里是按照数量排过序的,两个柱子也是颜色区分的,X的标签是斜着旋转45度,并且是以字符串右边为中心旋转的。标题也调整了字号并且加粗了,其实和上面讲的都差不多,只有画图的时候,给y轴传了个数组。

#按2017列的数据排个序
students.sort.values(by="2017",inplace=True,ascending=False)
#要展示多列数据,y里就用数组,对应的颜色也用数组
students.plot.bar(x="filed", y=["2016","2017"], color=["orange","red"])
#要调节title的参数,直接用matplotlib.pyplot, 设置字号,和粗体
plt.title("Title Name", fontsize=17,fontweight="bold")
#给X和Y轴加上标题,并且加粗
plt.xlabel('Field', fontweight="bold")
plt.ylabel('Number', fontweight="bold")

#一个逻辑点:用pyplot画东西主要是两块区域,一个是figure(图表区域),一个是x轴

#拿到X轴,旋转x的label,并且以最右边为中心旋转
ax=plt.gca()#拿到x轴
#设置标签旋转,ha代表旋转中心在哪
ax.set_xticklabels(students("Field"), rotation=45, ha='right')

#拿到figure图标区域
f=plt.gcf()
#调整边距,百分比。
f.subplots_adjust(left=0.2, bottom=0.42)
#plt.tight_layout() #由于手动调整了整个图表的边距范围,就不能加紧凑型布局了
plt.show()

柱状图还有一种是叠加柱状图,除了数据大小还能体现出一个比例,比如现在数据表是这样的:
在这里插入图片描述
假设是每个用户(Name列),对应10、11、12月的登录次数,要做叠加柱状图,X轴是用户,Y轴是数量,图长这样:
在这里插入图片描述
这个图其实也简单,画的方法里加个参数就行,主要是排序的问题,因为是3个列之和的排序,所以要提前新建个列,算出来总和,再排序就行了。

#先读这个文件数据
users=pd.read_excel("c:/tmp/1.xlsx")
#如果要按照3个叠加起来的数排序,要生成一个新的列来排序, 就叫Total吧
users["Total"]=users['Oct']+users['Nov']+users['Dec']
#然后按照Total排个序
users.sort.values(by="Total",inplace=True,ascending=False)
#画柱状图,Y轴还是需要这3个列的,但是加个stacked参数就变叠加啦!
users.plot.bar(x='Name', y=['Oct','Nov','Dec'],color=['blue','orange','green'], stacked=True)
#如果要把这个图转90度,变成水平的,就用 barh方法
users.plot.barh((x='Name', y=['Oct','Nov','Dec'],color=['blue','orange','green'],stacked=True)
#后面显示以及title等添加和样式变化的方法和之前一样,就不说了

柱状图还挺多,其实关键逻辑挺简单,写几次就没问题了,先到这,后面接着学画其他图

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值