matplotlib——条形图

matplotlib——条形图

条形图的概念:

条形图一般用于表示分类变量的数值大小,或者各类别频数的多少。条形图一般用于数量较多的分类比较,而柱状图一般用于数量较少的分类比较。
这里所用到的画图函数是:barh(bottom, width, height=0.8, left=None, **kwargs)对于其中的参数,简单描述:bottom:y轴的值,width:x轴的值,height:条形图的高度,left=None:就是紧挨y轴。


两种条形图绘制方法:

1.一般条形图

引入例子进行展示,在这里使用Titanic的数据集。具体看以下代码与运行结果。
示例代码:

这里写图片描述
如果我们利用此数据集,想做一个top10票价与对应人名的条形图,该怎样做呢?(有加入注释)
示例代码:

@skl--python

#y轴的刻度值
labels_length = np.arange(len(df_top10["Name"]))
#表示数据条的长度
values = df_top10["Fare"].round(1).sort_values()
#y轴刻度标签
labels = df_top10["Name"].sort_index(ascending = False)

#创建fig,axes对象
fig,ax = plt.subplots(figsize = (8,5),dpi = 80)
#在子图对象上画条形图,添加名字标签
ax.barh(labels_length,values,tick_label = labels)
ax.set_xlabel("Fare")  #并添加x轴标签
ax.set_title("top10 of Fare")  #图形的主标题

#添加数据标签
for a,b in zip(labels_length,values):
    ax.text(b+21,a,b,ha = "center")
plt.show()

运行结果:

这里写图片描述
分步理解代码:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

2.正负条形图

如果我们想在一个图中增加了一个维度,例如显示不同船舱等级,不同性别的获救人数。此时,可以考虑用正负条形图来展示。
示例代码:

@skl--python

#显示中文字体为SimHei
plt.rcParams["font.sans-serif"]=["SimHei"]
#用来正常显示负号
plt.rcParams['axes.unicode_minus']=False 

#数据源
df_grouped1 = df.groupby(["Sex","Pclass"])["Survived"].sum()  #利用sex和Pclass进行分组
female = df_grouped1.loc["female"]       #性别为female,Pclass为1,2,3时各获救人数
male = df_grouped1.loc["male"]        #同上
labels = df_grouped1.loc["male"].index   #male的索引值其实就是Pclass的值1、2、3

#创建figure和axes对象
fig,ax = plt.subplots(figsize=(8,5),dpi=80)

#在子图对象上画条形图
ax.barh(np.arange(len(female)),female,label="female",height=0.5)
ax.barh(np.arange(len(male)),-male,label="male",height=0.5,tick_label=labels)

#添加x轴标签,y轴标签,标题,修改x轴范围,显示图例
ax.set(xlabel="获救人数",ylabel="等级舱",title="不同舱位的男女获救人数")
ax.set_xlim(-100,100)
ax.legend()


#添加数据标签
for a,b in zip(female,np.arange(len(female))):
    ax.text(a+4,b,a,ha="center",fontsize=10)
for a,b in zip(male,np.arange(len(male))):
    ax.text(-a-4,b,a,ha="center",fontsize=10)
plt.show()

运行结果:

这里写图片描述
分步代码:

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值