100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 数据可视化:绘制图表(一)——柱状图

数据可视化:绘制图表(一)——柱状图

时间:2024-06-24 09:47:24

相关推荐

数据可视化:绘制图表(一)——柱状图

在python中有多种方法绘制柱状图,可使用matplotlib库、numpy库、pandas库、seaborn库等。通过做题,更快理解如何使用不同第三方库组合绘制柱状图。

在matplotlib库中,绘制柱状图,一般用plt.bar()函数。

1. 垂直柱状图

import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"] = ["SimHei"]#设置字体plt.rcParams["axes.unicode_minus"] = Falsex = [1,2,3,4,5,6,7,8] #X轴数据y = [30,11,42,53,81,98,72,25]#Y轴数据对应柱子高度#定义柱子子的标签labels = ["A","B","C","D","E","F","G","H"] #绘制纵向柱状图plt.bar(x,y,align = "center", color=["r","g","b"], tick_label = labels, hatch = "/", ec = 'gray')#hatch定义柱图的斜纹填充,省略该参数表示默认不填充; ec边框颜色为灰色。#绘制X、Y轴标签plt.xlabel(u"样品编号") #u代表对字符串进行unicode编码。对中文表明所需编码,防止出现乱码。plt.ylabel(u"库存数量")#绘制柱状图标题plt.title("带颜色的柱状图")plt.show()

(垂直柱状图)运行结果如下:

2. 水平柱状图

将垂直柱状图的X、Y轴的标签交换就可以得到水平的柱状图

import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"] = ["SimHei"]#设置字体plt.rcParams["axes.unicode_minus"] = Falseplt.barh(x,y,align = "center", color=["r","g","b","c","magenta"], tick_label = labels, hatch = "/", ec = 'gray')# 水平柱状图和垂直柱状图的X,Y轴标签交换plt.ylabel(u"游戏种类") #u代表对字符串进行unicode编码。对中文表明所需编码,防止出现乱码。plt.xlabel(u"销售(个)")plt.title("游戏销量对比")plt.show()

(水平柱状图)运行结果如下:

3. 简单的堆叠直方图(应用题)

假设有男生女生都有四个爱好,分别是足球、游泳、看剧、逛街,用直方图体现出各个爱好的男女比例。

import matplotlib.pyplot as pltimport numpy as np#设置中文字体、大小plt.rc('font',family='SimHei',size=15)#绘制柱状图标题plt.title('男女爱好人数分布图')#归纳数据num=np.array([14325,9403,13227,18651]) #每一项爱好的总人数ratio=np.array([0.75,0.6,0.22,0.1])#男性占比men=num*ratio#男性在每一项爱好的人数women=num*(1-ratio)#女性在每一项爱好的人数#定义X轴标签x=['足球','游泳','看剧','逛街'] width=0.5#柱宽idx=np.arange(len(x)) #索引#绘制直方图plt.bar(idx,men,width,color='red',label='男性用户') #在索引到对应的刻度,柱宽为0.5,红色部分代表男性用户plt.bar(idx,women,width,bottom=men,color='gray',label='女性用户') #在索引到对应的刻度,柱宽为0.5,底部和男性用户一样,灰色部分代表女性用户#绘制X、Y轴标签plt.xlabel('应用比例') plt.ylabel('男女分布')#定义X轴标签刻度位置,字体旋转40° plt.xticks(idx+width/2,x,rotation=40) #使直方图上显示数字for a,b in zip(idx,men):plt.text(a,b+0.05,'%.0f'%b,ha='center',va='bottom',fontsize=12)for a,b,c in zip(idx,women,men):plt.text(a,b+c+0.05,'%.0f'%b,ha='center',va='bottom',fontsize=12)plt.legend()#显示图例plt.show() #显示柱状图

(堆叠直方图)运行结果如下:

4. 并列柱状图

import matplotlib.pyplot as pltimport numpy as np#定义中文字体类型plt.rcParams['font.sans-serif']=['SimHei'] #定义柱状图标题plt.title('育才小学五年级各班成绩优秀人数统计图') chinese=[10.0, 5.0, 6.0, 9.0, 15.0, 17.0, 8.0, 11.0] #各班语文成绩优秀人数english=[7.0, 13.0, 15.0, 12.0, 8.0, 12.0, 16.0, 13.0]#各班英语成绩优秀人数math=[5.0, 10.0, 8.0, 5.0, 10.0, 9.0, 13.0, 7.0] #各班数学成绩优秀人数bar_width=0.2#定义柱宽为0.2tick_label=['1班','2班','3班','4班','5班','6班','7班','8班'] #定义X轴标签名称x=np.arange(len(tick_label))#X轴标签分布有8个#绘制并列柱状图plt.bar(x,chinese,bar_width,color='r',align='center',label='语文') #柱宽为0.2,标签在柱子中间,红色柱子代表语文成绩plt.bar(x+bar_width,math,bar_width,color='y',align='center',label='数学')#柱宽为0.2,标签在柱子中间,黄色柱子代表数学成绩plt.bar(x+bar_width*2,english,bar_width,color='c',align='center',label='英语')#柱宽为0.2,标签在柱子中间,青色柱子代表英语成绩plt.xlabel('班级') #定义X轴标签plt.ylabel('成绩') #定义Y轴标签plt.xticks(x+bar_width,tick_label)#定义X轴标签位置plt.legend() #显示图例plt.show() #显示柱状图

(并列柱状图)运行结果如下:

如有错误,欢迎各位大神指正。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。