Base python matlibplot库——

一、主要参数介绍:

bar(left, height, width=0.8, bottom=None, **kwargs)
  1. left为和分类数量一致的数值序列,序列里的数值数量决定了柱子的个数,数值大小决定了距离0点的位置
  2. height为分类变量的数值大小,决定了柱子的高度
  3. width决定了柱子的宽度,仅代表形状宽度而已
  4. bottom决定了柱子距离x轴的高度,默认为None,即表示与x轴距离为0

事实上,leftheightwidthbottom这四个参数确定了柱体的位置和大小。默认情况下,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轴的高度;设置柱体颜色;设置柱体描边;并列、多条柱状图相关推荐

  1. python matplotlib画图遇到的问题——画多个子图

    画多个子图 两种方法: 一种 用fig.add_subplot(),但是这种貌似无法达到下面另外一种的效果 fig=plt.figure() ax1=fig.add_subplot(221) ax2= ...

  2. 【python matplotlib 】fig, ax = plt.subplots()画多表图

    文章目录 一. fig, ax = plt.subplots()的作用 二.参数的含义 三.图上排列多个子图 四.把多个子图一起合并到一个图上 五.画图刻度.图例等字体.字体大小.刻度密度.线条样式设 ...

  3. Python+Matplotlib+MiKTex设置标签字符串中任意字符格式

    推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年12月第11次印刷,山东省一流 ...

  4. Python matplotlib绘制直方图

    Python matplotlib绘制直方图 前面的文章介绍了使用matplotlib绘制折线图.散点图和柱状图,柱状图参考:https://blog.csdn.net/weixin_43790276 ...

  5. 39.文本颜色设置SetTextColor、SetBkColor、SetCharacterExtra、GetSysColor、InvalidateRect

    SetTextColor设置文本前景色 __gdi_entry WINGDIAPI COLORREF WINAPI SetTextColor( __in HDC hdc, //绘图设备上下文__in ...

  6. matplotlib入门基础(五)轴坐标范围 轴刻度比例 轴刻度

    这篇文章同样以面向对象风格为主,介绍设置轴坐标范围.轴刻度比例.轴刻度(xtick,ytick)的方法. 这篇文章分以下部分来介绍: 1. 设置轴坐标范围 2. 设置轴刻度比例 3. 设置轴刻度 1. ...

  7. Echarts的使用之制作红黑榜柱形图(前后三名柱体颜色、数据颜色不一致)

    要求实现效果: 在一次项目中,有个管理仪表盘页需要制作,所以就选择了使用echarts来显示数据, 第一次用的时候很好用诶!!还觉得有点神奇!哈哈哈哈 土白就是我叭(又土有小白,我就是代言人!) 在制 ...

  8. qt中设置QCheckBox的文本与勾选框之间的距离

    引言 项目中需要设置QCheckBox的文本与勾选框之间的距离,还有需要将勾选框设置的大一点,不是使用原始大小的勾选框.花了一点时间才知道如何实现.现在记录一下. 示例 我是通过样式表实现的文本与勾选 ...

  9. echarts x轴像直尺一样设置刻度_MATLAB作图实例:6:指定轴刻度值和标签

    沿轴自定义刻度值和标签可以帮助突出显示数据的特定方面.本文示例显示了一些常见的自定义设置,例如,修改刻度值的位置,更改刻度标签的文本和格式以及旋转刻度标签. 更改刻度值位置和标签 将x创建为介于-10 ...

最新文章

  1. 【Springboot】日志
  2. shutil的一些基本用法
  3. java输出减法表,Calendarjava时间加减法和格式化输出
  4. oracle停止trace日志,关闭ORACLE客户端trace日志
  5. python大神的成长之路_我的Python成长之路
  6. 6.4.3树和森林的遍历
  7. Hadoop(十二)MapReduce概述
  8. 微软Bing翻译API的使用
  9. 学习记录:小程序图片上传至服务器
  10. 用letax写毕业论文-- 原创性声明、承诺书、授权书
  11. android:scrollbars代码控制,android:scrollbars属性和弹出键盘的问题
  12. 娱乐圈有缘无份的明星
  13. 小学期c语言电脑的总结,小学期实践报告和总结
  14. 用python编写乒乓球小游戏--Turtle功能的应用
  15. js实现word转换为html
  16. flutter学习笔记--传递信息
  17. 这就是你日日夜夜想要的docker!!!---------三分钟带你玩转docker命令
  18. 分文件编辑报错信息有.bss
  19. C++打卡1-夫妇和驴
  20. JavaSE_kuang

热门文章

  1. 瑞萨RA系列-开发环境搭建
  2. linux查看硬盘命令 ok,linux查看硬件信息大全
  3. 如何使用 WEB 技术编写前端代码,实现大屏展示和地图显示功能
  4. 发多少范德萨范德萨范德萨范德萨
  5. python android自动化元素定位_appium+python android元素定位
  6. Android虚拟键盘和虚拟触摸驱动
  7. 一招解决MySql Specified key was too long; max key length is 767 bytes
  8. 为什么说HashSet是无序的
  9. 正切tan的概念实体化
  10. centos7的网卡重启方法