【数据处理】Python,matplotlib 如何画柱状图?如何画各种类型的柱状图?柱子宽度设置;设置X轴刻度用label显示;设置柱子距离x轴的高度;设置柱体颜色;设置柱体描边;并列、多条柱状图
Base python matlibplot库——
一、主要参数介绍:
bar(left, height, width=0.8, bottom=None, **kwargs)
left
为和分类数量一致的数值序列,序列里的数值数量决定了柱子的个数,数值大小决定了距离0点的位置height
为分类变量的数值大小,决定了柱子的高度width
决定了柱子的宽度,仅代表形状宽度而已bottom
决定了柱子距离x轴的高度,默认为None,即表示与x轴距离为0
事实上,left
,height
,width
,bottom
这四个参数确定了柱体的位置和大小。默认情况下,left为柱体的居中位置(可以通过align参数来改变left值的含义)
例程:(以下操作都是按照这个数据)
# 正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus']=Falseplt.rcParams['axes.labelsize']=16
plt.rcParams['xtick.labelsize']=14
plt.rcParams['ytick.labelsize']=14
plt.rcParams['legend.fontsize']=12
plt.rcParams['figure.figsize']=[16,6]
# 使用样式
plt.style.use("ggplot")
label = ["a","b","c","d","e"]
x = [0,1,2,3,4]
y = [30,20,15,25,10]
二、柱子宽度设置
width决定了柱子的宽度,仅代表形状宽度而已,默认为0.8
fig = plt.figure()# 生成第一个子图在1行2列第一列位置
ax1 = fig.add_subplot(121)# 生成第二子图在1行2列第二列位置
ax2 = fig.add_subplot(122)# 绘图并设置柱子宽度0.5
ax1.bar(x, y, width=0.5)# 绘图默认柱子宽度0.8
ax2.bar(x, y)
plt.show()
三、设置X轴刻度用label显示
设置x轴刻度(tick_label)用 label = [“a”,“b”,“c”,“d”,“e”] 显示
fig = plt.figure()# 生成第一个子图在1行2列第一列位置
ax1 = fig.add_subplot(121)# 生成第二子图在1行2列第二列位置
ax2 = fig.add_subplot(122)# 绘图并设置柱子宽度0.5
ax1.bar(x, y, width=0.5)# 绘图默认柱子宽度0.8,设置x轴刻度(tick_label)用 label = ["a","b","c","d","e"] 显示
ax2.bar(x, y,tick_label=label)
plt.show()
四、设置柱子距离x轴的高度
bottom决定了柱子距离x轴的高度,默认为None,即表示与x轴距离为0
fig,ax = plt.subplots(figsize=(8,5),dpi=80)# 设置第一个柱子离x轴 为5 ,第二、三、五个柱子不变,第四个柱子离x轴 为8
ax.bar(x,y,width=0.3,bottom=[5,0,0,8,0])plt.show()
五、设置柱体颜色
通过 facecolor(或fc) 关键字参数可以设置柱体颜色
通过 color 关键字参数 可以一次性设置多个颜色
fig = plt.figure()# 生成第一个子图在1行2列第一列位置
ax1 = fig.add_subplot(121)# 生成第二子图在1行2列第二列位置
ax2 = fig.add_subplot(122)ax1.bar(x, y, fc='c')ax2.bar(x, y,color=['r', 'g', 'b']) # 或者color='rgb' , color='#FFE4C4'plt.show()
六、设置柱体描边
相关的关键字参数为:
- edgecolor 或 ec 描边颜色
- linestyle 或 ls 描边样式
- linewidth 或 lw 描边宽度
# edgecolor 或 ec 描边颜色为(cyan),linestyle 或 ls 描边样式 (-.)
# linewidth 或 lw 描边宽度(5),柱子颜色(#EECFA1)
plt.bar(x, y, ec='c', ls='-.', lw=5,color='#EECFA1')
plt.show()
七、设置柱体描边填充
hatch 关键字可用来设置填充样式,可取值为: / , \ , | , - , + , x , o , O , . , * 。
plt.bar(x, y, ec='c', ls='-.', lw=5,color='#EEDC82',hatch='*')
plt.show()
八、不同柱状图类型绘制
1. 堆积柱状图
通过 bottom 参数,可以绘制堆叠柱状图。
#显示中文字体为SimHei
plt.rcParams["font.sans-serif"]=["SimHei"]sale8 = [10,20,30,15,18]
sale9 = [10,12,24,32,8]# x轴的刻度为1-5号衣服
labels = ["{}号衣服".format(i) for i in range(1,6)]fig,ax = plt.subplots(figsize=(12,6),dpi=80)ax.bar(range(len(sale8)),sale8,tick_label=labels,label="8月")# 九月的bottom是sale8,也就是八月,所以九月在上边
ax.bar(range(len(sale9)),sale9,bottom=sale8,tick_label=labels,label="9月")
ax.legend()
plt.show()
2. 并列柱状图
绘制并列柱状图与堆叠柱状图类似,都是绘制多组柱体,只需要控制好每组柱体的位置和大小即可。
import numpy as np
#显示中文字体为SimHei
plt.rcParams['font.sans-serif']=['SimHei']sale8 = [5,20,15,25,10]
sale9 = [10,15,25,30,5]# x轴的刻度为1-5号衣服
labels = ["{}号衣服".format(i) for i in range(1,6)]fig,ax = plt.subplots(figsize=(8,5),dpi=80)
width_1 = 0.4ax.bar(np.arange(len(sale8)),sale8,width=width_1,tick_label=labels,label = "8月")ax.bar(np.arange(len(sale9))+width_1,sale9,width=width_1,tick_label=labels,label="9月")ax.legend()
plt.show()
3. 横状条形图
使用 barh
方法绘制条形图,plt.barh 方法的签名为:
barh(bottom, width, height=0.8, left=None, **kwargs)
可以看到与 plt.bar 方法类似。所以堆积条形图和并列条形图的画法与前面类似。
plt.barh(x, y)
plt.show()
4. 正负条形图
import numpy as np
import matplotlib.pyplot as pltx = np.array([5, 20, 15, 25, 10])
y = np.array([11, 15, 22, 14, 5])plt.barh(range(len(x)), x)
plt.barh(range(len(y)), -y)
plt.show()
九、案例介绍
1. 案例一:同一本书不同平台最低价比较
很多人在买一本书的时候,都比较喜欢货比三家,例如《python数据分析实战》在亚马逊、当当网、中国图书网、京东和天猫的最低价格分别为39.5、39.9、45.4、38.9、33.34。针对这个数据,我们也可以通过条形图来完成,这里使用水平条形图来显示:
import matplotlib.pyplot as plt
import numpy as np
# 正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus']=Falseplt.rcParams['axes.labelsize']=16
plt.rcParams['xtick.labelsize']=14
plt.rcParams['ytick.labelsize']=14
plt.rcParams['legend.fontsize']=12
plt.rcParams['figure.figsize']=[15,15]
plt.style.use("ggplot")
price = [39.5,39.9,45.4,38.9,33.34]
for x,y in enumerate(price):print(x,y)
0 39.5
1 39.9
2 45.4
3 38.9
4 33.34fig,ax = plt.subplots(figsize=(12,5),dpi=80)x = range(len(price))
# 添加刻度标签
labels = np.array(['亚马逊','当当网','中国图书网','京东','天猫'])
#在子图对象上画条形图,并添加x轴标签,图形的主标题
ax.barh(x,price,tick_label=labels,alpha = 0.8)ax.set_xlabel('价格',color='k')
ax.set_title('不同平台书的最低价比较')# 设置Y轴的刻度范围
ax.set_xlim([32,47])# 为每个条形图添加数值标签
for x,y in enumerate(price):ax.text(y+0.2,x,y,va='center',fontsize=14)# 显示图形
plt.show()
代码解读
水平条形图的绘制与垂直条形图的绘制步骤一致,只是调用了barh函数来完成。需要注意的是,条形图的数值标签设置有一些不一样,需要将标签垂直居中显示,使用va参数即可。
2. 案例二:胡润财富榜:亿万资产超高净值家庭数
利用水平交错条形图对比2016年和2017年亿万资产超高净值家庭数(top5),其数据如下:
import matplotlib.pyplot as plt
import numpy as np
# 正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus']=Falseplt.rcParams['axes.labelsize']=16
plt.rcParams['xtick.labelsize']=14
plt.rcParams['ytick.labelsize']=14
plt.rcParams['legend.fontsize']=16
plt.rcParams['figure.figsize']=[12,10]
plt.style.use("ggplot")
# 构建数据
Y2016 = [15600,12700,11300,4270,3620]
Y2017 = [17400,14800,12000,5200,4020]
labels = ['北京','上海','香港','深圳','广州']
bar_width = 0.35
x = np.arange(len(Y2016))
fig = plt.figure()
ax = fig.add_subplot(111)# 绘图
ax.bar(x,Y2016,label='Y2016',width=bar_width)
ax.bar(x+bar_width,Y2017,label='Y2017',width=bar_width)
# 添加轴标签
ax.set_xlabel('Top5城市')
ax.set_ylabel('家庭数量')
# 添加标题
ax.set_title('亿万财富家庭数Top5城市分布',fontsize=16)
# 添加刻度标签
plt.xticks(x+bar_width,labels)
# 设置Y轴的刻度范围
plt.ylim([2500, 19000])# 为每个条形图添加数值标签
for x2016,y2016 in enumerate(Y2016):plt.text(x2016, y2016+200, y2016,ha='center',fontsize=16)for x2017,y2017 in enumerate(Y2017):plt.text(x2017+0.35,y2017+200,y2017,ha='center',fontsize=16)# 显示图例
ax.legend()
# 显示图形
plt.show()
代码解读
- 水平交错条形图绘制的思想很简单,就是在第一个条形图绘制好的基础上,往左移一定的距离,再去绘制第二个条形图,所以在代码中会出现两个bar函数;
- 图例的绘制需要在bar函数中添加label参数;color和alpha参数分别代表条形图的填充色和透明度;
- 给条形图添加数值标签,同样需要使用两次for循环的方式实现;
【数据处理】Python,matplotlib 如何画柱状图?如何画各种类型的柱状图?柱子宽度设置;设置X轴刻度用label显示;设置柱子距离x轴的高度;设置柱体颜色;设置柱体描边;并列、多条柱状图相关推荐
- python matplotlib画图遇到的问题——画多个子图
画多个子图 两种方法: 一种 用fig.add_subplot(),但是这种貌似无法达到下面另外一种的效果 fig=plt.figure() ax1=fig.add_subplot(221) ax2= ...
- 【python matplotlib 】fig, ax = plt.subplots()画多表图
文章目录 一. fig, ax = plt.subplots()的作用 二.参数的含义 三.图上排列多个子图 四.把多个子图一起合并到一个图上 五.画图刻度.图例等字体.字体大小.刻度密度.线条样式设 ...
- Python+Matplotlib+MiKTex设置标签字符串中任意字符格式
推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年12月第11次印刷,山东省一流 ...
- Python matplotlib绘制直方图
Python matplotlib绘制直方图 前面的文章介绍了使用matplotlib绘制折线图.散点图和柱状图,柱状图参考:https://blog.csdn.net/weixin_43790276 ...
- 39.文本颜色设置SetTextColor、SetBkColor、SetCharacterExtra、GetSysColor、InvalidateRect
SetTextColor设置文本前景色 __gdi_entry WINGDIAPI COLORREF WINAPI SetTextColor( __in HDC hdc, //绘图设备上下文__in ...
- matplotlib入门基础(五)轴坐标范围 轴刻度比例 轴刻度
这篇文章同样以面向对象风格为主,介绍设置轴坐标范围.轴刻度比例.轴刻度(xtick,ytick)的方法. 这篇文章分以下部分来介绍: 1. 设置轴坐标范围 2. 设置轴刻度比例 3. 设置轴刻度 1. ...
- Echarts的使用之制作红黑榜柱形图(前后三名柱体颜色、数据颜色不一致)
要求实现效果: 在一次项目中,有个管理仪表盘页需要制作,所以就选择了使用echarts来显示数据, 第一次用的时候很好用诶!!还觉得有点神奇!哈哈哈哈 土白就是我叭(又土有小白,我就是代言人!) 在制 ...
- qt中设置QCheckBox的文本与勾选框之间的距离
引言 项目中需要设置QCheckBox的文本与勾选框之间的距离,还有需要将勾选框设置的大一点,不是使用原始大小的勾选框.花了一点时间才知道如何实现.现在记录一下. 示例 我是通过样式表实现的文本与勾选 ...
- echarts x轴像直尺一样设置刻度_MATLAB作图实例:6:指定轴刻度值和标签
沿轴自定义刻度值和标签可以帮助突出显示数据的特定方面.本文示例显示了一些常见的自定义设置,例如,修改刻度值的位置,更改刻度标签的文本和格式以及旋转刻度标签. 更改刻度值位置和标签 将x创建为介于-10 ...
最新文章
- 【Springboot】日志
- shutil的一些基本用法
- java输出减法表,Calendarjava时间加减法和格式化输出
- oracle停止trace日志,关闭ORACLE客户端trace日志
- python大神的成长之路_我的Python成长之路
- 6.4.3树和森林的遍历
- Hadoop(十二)MapReduce概述
- 微软Bing翻译API的使用
- 学习记录:小程序图片上传至服务器
- 用letax写毕业论文-- 原创性声明、承诺书、授权书
- android:scrollbars代码控制,android:scrollbars属性和弹出键盘的问题
- 娱乐圈有缘无份的明星
- 小学期c语言电脑的总结,小学期实践报告和总结
- 用python编写乒乓球小游戏--Turtle功能的应用
- js实现word转换为html
- flutter学习笔记--传递信息
- 这就是你日日夜夜想要的docker!!!---------三分钟带你玩转docker命令
- 分文件编辑报错信息有.bss
- C++打卡1-夫妇和驴
- JavaSE_kuang