最近在做数据可视化的时候,希望在图上同时显示数据表。关于这个需求,用excel可以比较方便,直接快速布局中选择布局5即可。那么,如果我们想用python也来完成这项任务,可以怎么做呢?

期望效果预览

excel作图效果

1. Excel简单绘制

就很简单了,直接选中数据插入柱状图,然后在图表工具-设计-快速布局中选择相应的布局即可。

案例数据及效果

excel图表设计->快速布局—>布局5

2. Python绘制

那这里我们用到的是matplotlibbartable

将图表元素进行拆解,可以分为柱状图和数据表,刚好matplotlib提供了对应的接口。

2.1 柱状图绘制

先绘制柱状图,案例中是两组数据,所以是组合柱状图。在本次绘制中,有以下几个知识点,可以记一记:

  • 设置标题时的位置(用参数x,y指定)

  • 设置坐标轴标题时用参数rotation旋转方向

  • 设置坐标轴区间范围

  • 显示数据标签(用ax.bar_label方法)

import numpy as np
import matplotlib.pyplot as plt# 中文及负数显示
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False# 创建画布
fig, ax = plt.subplots(figsize=(10, 4), dpi=100)# 案例数据
data = [[150, 200,  -50, -100,  -75],[300, 125,  -80,  75, -100],]
# 列与行
columns = ('周一', '周二', '周三', '周四', '周五')
rows = ['才哥', '楠楠']# 作图参数
index = np.arange(len(columns))-0.1
bar_width = 0.4# 设置柱状图颜色
colors = ['turquoise', 'coral']# 柱状图
bar1 = plt.bar(index, data[0], bar_width, color=colors[0], edgecolor='grey')
bar2 = plt.bar(index+bar_width, data[1],bar_width, color=colors[1], edgecolor='grey')# 设置标题
ax.set_title('工作日收益情况', fontsize=16, y=1.1,x=0.44)
# 设置坐标轴标题
ax.set_ylabel("元", fontsize=12, color='black', alpha=0.7, rotation=360)
# 设置Y轴区间
ax.set_ylim(-150, 350)# 显示数据标签
ax.bar_label(bar1, label_type='edge')
ax.bar_label(bar2, label_type='edge')# x,y轴刻度不显示
ax.tick_params(axis=u'both', which=u'both', length=0)
# x轴刻度及刻度值不显示
plt.xticks([])

输出如下:

组合柱状图

2.2. 图表table绘制

先看看图表table的绘制,我们拿案例数据来单独绘制看看:

# 创建画布
fig, ax = plt.subplots(figsize=(10, 4), dpi=100)
# table图表
the_table = plt.table(cellText=data, rowLabels=rows,rowColours=colors,colLabels=columns, cellLoc='center', loc="bottom",bbox=[0, -0.4, 1, 0.24])

输出如下:

table

关于 plt.table的参数介绍如下:

cellText:表格单元格文本,字符串中的换行符暂不支持,可能导致文本超出单元格边界
cellColours:表格单元格背景色
cellLoc:表格单元格文本的对齐方式,取值范围为{'left', 'center', 'right'},默认值为'right'
colWidths:表格单元格宽度
rowLabels:表格行表头文本
rowColours:表格行表头背景色
rowLoc:表格行表头文本的对齐方式,取值范围为{'full', 'left', 'right'},默认值为'left'
colLabels:表格列表头文本
colColours:表格列表头背景色
colLoc:表格列表头文本的对齐方式,取值范围为{'full', 'left', 'right'},默认值为'left'
loc:单元格相对于子图的位置

bbox:绘制表格的边界框

最后,我们需要做的就是将上述两个图进行组合,组合过程中可能需要做一些格式微调。

2.3. 组合

在本次案例中,对组合图需求有以下几点:

  • 柱状图边框不显示

  • 图表table中列名高度需要高一些,单元格的高度要低一些

  • 图例位置需要和对应行一致

为了实现上诉需求,我们可以通过以下方式来处理:

# 设置单元格高度
cellDict = the_table.get_celld()
for i in range(0, len(columns)):cellDict[(0, i)].set_height(0.6)for j in range(1, len(rows)+1):cellDict[(j, i)].set_height(0.4)# 设置图表table中行名单元格的高度
cellDict[(1, -1)].set_height(0.4)
cellDict[(2, -1)].set_height(0.4)# 设置图表table单元格文本字体
the_table.auto_set_font_size(False)
the_table.set_fontsize(10)# 设置图表table单元格边框
for key, cell in the_table.get_celld().items():cell.set_linewidth(0.6)# 边框隐藏
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)name = ['', '']
# 设置图例的位置
ax.legend(name, handlelength=0.7, labelspacing=0.6,bbox_to_anchor=(-0.1, -0.23),loc='upper left', frameon=False)

最终,我们可以得到比较满意的效果:

最终效果

对比excel,用python绘制柱状图时添加table数据表相关推荐

  1. 【python】使用python绘制地图时添加指北针

    写在前面 本博文基于matplotlib,手动实现在python中绘制地图时添加指北针. 代码如下: from mpl_toolkits.basemap import Basemap import m ...

  2. python绘制柱状图/对比图

    python绘制柱状图/对比图 本次演示的是两组数据的对比柱状图,绘制效果如下: 共两组数据,每组有八个元素: list1=[88.59,86.23,87.79,84.35,89.97,88.36,8 ...

  3. Python 绘制柱状图和双柱状图

    python用matplotlib画图时不显示中文,显示乱码小正方形 在程序最前面加上,如下代码 # encoding=utf-8 import matplotlib.pyplot as plt fr ...

  4. 2021-04-29 Python绘制柱状图之可视化神器Pyecharts

    Python绘制柱状图之可视化神器Pyecharts 昨晚写了关于Matplotlib的可视化,今天推荐一个可视化的利器-pyecharts. 前文链接:Python可视化图表生成-Matplotli ...

  5. python绘制柱状图,如何改变柱状柱间距,如何设置横纵轴标签(绘制Intel Realsense D435深度误差柱状图)

    文章目录 [参考文章1:Python 绘制 柱状图](https://www.cnblogs.com/shenxiaolin/p/11100094.html) 我的代码 参考文章1:Python 绘制 ...

  6. python 绘制柱状图

    python 绘制柱状图 import matplotlib.pyplot as plt import numpy as np# 创建一个点数为 8 x 6 的窗口, 并设置分辨率为 80像素/每英寸 ...

  7. 数据分析领域,为什么要对比Excel学习Python?

    Python本身是一门编程语言,应用于Web开发.爬虫.机器学习等多个领域,但是除了这些,今天我要告诉你Python大热的一个学习方向--那就是Python数据分析. 我常常会听到这样的问题,&quo ...

  8. Python数据分析是什么?为什么要对比Excel学习Python数据分析?

    Python 虽然是一门编程语言,但是它并不难学,不仅不难学,而且很容易上手,这也是Python深受广大数据从业者喜爱的原因之一,因此大家在学习Python之前首先在心里告诉自己一句话,那就是Pyth ...

  9. Python——绘制柱状图

    Python--绘制柱状图 附: Python--问题解决:matplotlib.pyplot绘制函数中文乱码

最新文章

  1. 最简单的CI框架入门示例--数据库取数据
  2. problem-solving-with-algorithms-and-data-structure-usingpython(使用python解决算法和数据结构) -- 基本数据结构(二)...
  3. Perforce使用之创建DEPOT流程
  4. NPOI 导入Excel和读取Excel
  5. 卧虎藏龙2不显示服务器列表,《卧虎藏龙贰》iOS平台 合服公告(第2期)
  6. C++设计模式之访问者模式
  7. 云原生的本质_云原生是什么 云原生技术有何作用
  8. python dictionary_Python 字典(Dictionary)
  9. 融合7大领域!Apache Flink 在开源生态下的应用实践
  10. webpack入坑之旅(一)不是开始的开始
  11. 联想笔记本进入不了BIOS的解决方法
  12. 筛数方法相关系数_EXCEL中如何求一组数据的相关系数
  13. python平方和psum_python求和函数sum()详解
  14. C语言中的各种百分号都代表什么意思
  15. 个人面经整理深信服测开
  16. 外卖优惠券返利系统外卖返利公众号搭建cps系统小程序SaaS源码
  17. 多级下料问题的建模--中英文翻译
  18. 个人中心布局android,Android实现个人中心设置界面
  19. Java 当前日期判断节假日
  20. 《Android开发卷——自定义日期选择器(二)》

热门文章

  1. 【渝粤教育】国家开放大学2018年春季 建筑结构基础 参考试题
  2. 【渝粤题库】陕西师范大学201301 《经济法学》作业(高起本、专升本)
  3. 计算机共享原理,synchronize底层原理 游戏电脑问题解决分享!
  4. android5.0 v4a,【图】多图讲解V4A提高G5音效详细步骤(G5音效可以更棒的)
  5. android usb触摸屏驱动 win10,Win10手机居然这样兼容安卓:直接运行apk!
  6. Verilog中fork...join 的用法
  7. java实现驾校考试系统_jsp驾校考试系统
  8. 写屏障是什么_面试官为什么问内存模型总离不开final关键字,该如何应对?
  9. 问题 1046: [编程入门]自定义函数之数字后移
  10. 外点惩处函数法·约束优化问题