3b2976450b00dd3aa7e8ba42ef7166a7.gif

在后台回复【阅读书籍】

即可获取python相关电子书~

Hi,我是山月。

之前给大家分享了openpyxl的基础和进阶教程:

今天来给大家分享openpyxl的最后一个教程:透视数据表和图表。


由于文章包含了大量代码,为了阅读方便,代码设置成了图片的格式,如果需要源代码的同学,可以在后台回复【openpyxl图表】来获取~

参考自官网:https://openpyxl.readthedocs.io/en/stable/。

01

数据透视表

如果你经常使用excel的话,对于数据透视表应该不陌生。

但注意的是openpyxl并不能创建数据透视表,只能读取透视表以及编辑和操作现有的数据透视表,比如可以改变它们的范围或设置是否自动更新。

当然,对于python来说,可以利用pandas来创建数据透视表。这个暂且不表,以后再和大家分享。

在这里我们还是来看看openpyxl对数据透视表的操作。

假如现在有这样一个excel文件,它包含了两个数据透视表:

19062676d94896962c441f329224f219.png

如果我们要对数据进行更改,比把第2行的红儿年龄增加100变成182,那如何使工作薄里的透视表也进行相应的更改呢?

代码实现:

from openpyxl import load_workbook # 导入模块
wb = load_workbook("数据.xlsx") # 打开已有数据透视表的工作薄
ws = wb["Sheet1"] # 选择工作表Sheet1

ws['B2'] = 182  # B2单元格数据增加100,改成182

pivot = ws._pivots[0]  # 选择第一个透视表
pivot.cache.refreshOnLoad = True # 根据最新数据刷新透视表
wb.save('实例.xlsx')

效果:

a13edc5666a56e1b21b84d760c3d2eee.png

可以发现第一个透视表内容进行了变化,第二个透视表的内容并没有发生变化。


对于透视表其他的一些功能,大家如果有需要的话可以自行研究,对于山月来说,在它已有的功能基础上,最有用的莫过于刷新这个功能了。

下面我们来看看图表的部分。

02

图表

1、创建图表

我们以一个最简单的柱形图为例,来看看openpyxl如何创建图表。

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference # BarChart:条形图、柱形图

wb = Workbook()
ws = wb.active

# 写入一列数数据
for i in range(10):
    ws.append([i])

values = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10) # 选择图表的数据源
chart = BarChart() # 创建一个BarChart对象
chart.add_data(values) # 给BarChart对象添加数据源
ws.add_chart(chart, "E15") # 在工作表上添加图表,并指定图表左上角锚定的单元格。
wb.save('实例.xlsx') # 保存工作薄

效果:

02cdc6353b6aa4e0adaf236fb55dcd94.png

注意:如果不指定左上角锚定的单元格,默认为 E15;大小默认为 15 x 7.5 厘米(在我的电脑上大约是9列15行)。

其实创建图表的流程也很简单:导入对应的图表模块--选择数据源--创建图表对象--添加数据源--指定位置绘制图表。

2、轴范围和比例

1、最小值和最大值

我们可以手动设置轴的最小值和最大值以在图表上显示特定的区域。

7ca4f5685ca01b76518f302c90b9e824.png

效果:

1775621435ec0e5b87e52c3f879b1114.png

2、对数缩放

x 轴和 y 轴都可以进行对数缩放,对数的底可以设置为任何有效的浮点数。如果 x 轴以对数方式缩放,则域中的负值将被丢弃。

181f4f3cdf55d26a84a87414e1d70ef5.png

效果:

3838fccb535498898db7c22e6e3d37db.png

3、轴方向

轴方向由缩放方向属性控制,该属性的值可以是正常方向的“minMax”或反向的“maxMin”。

8831ca96e02815d46bd80102fd1ea31b.png

效果:

970cb834ce12707ac132f503b476f784.png

4、添加第2个轴

添加第二个轴实际上涉及创建第二个图表,该图表与第一个图表共享一个公共 x 轴,但有一个单独的 y 轴。

cc8783235c8daf3a8d8b545c926719e9.png

效果:

09854ee28932096f08a1a54a5bfe680a.png

3、更改图表布局

可以使用布局类实例的布局属性来设置图表的布局。


1、图表布局

1)Size and position

图表可以通过x和y调整位置,w和h调整大小,单位是图表区的比例。图表不能被定位在图表区之外,宽度和高度是主要的约束条件:如果x+w>1,那么x=1-w。

  • x是指从左边开始的水平位置

  • y 是从顶部看的垂直位置

  • h是图表相对于图表区的高度

  • w是图表区的宽度

2)Mode

除了大小和位置,相关属性的模式也可以设置为factor 或 edge,其中factor是默认值。设置成edge:

layout.xMode = edge

3)Target

布局目标可以设置在外侧(outer)或内侧(inner),默认是外侧(outer)。设置成内侧:

layout.layoutTarget = inner

2、图例布局

图例的位置可以设置:r、l、t、b 和 tr,分别代表右、左、上、下和右上,默认值为 r。设置成右上:

legend.position = 'tr'

也可以使用手动布局:

legend.layout = ManualLayout()

3、实例

9f4e224bfd41084c583684c56bbf3f4c.png

效果:

bec483d4e99227643bf5bcbc359eca57.png

4、添加样式

整个数据系列和单个数据点都可以通过图形属性进行样式设置。

2ba84bf2d5533a6388d3616b66f3c9ae.png

效果:

43ecfdec5b07a07858d43d15bd38f1bd.png

5、仪表图

仪表图将圆环图和饼图组合在一个图表中。

圆环图有四个切片:前三个切片对应于仪表的颜色;第四片,也就是一半的圆环图,是不可见的。

饼图有三个切片:第一个和第三个切片是不可见的,第二个切片可以充当仪表上的指针。

226ed7674c9cca90d6c619bd34cf81e3.png

效果:

0405a5fff5f63063af01b26494d86620.png

6、图表表

图表表是包含图表的特殊工作表。图表的所有数据必须位于不同的工作表上。

5d78e4e83e8ef708be74489f08293b30.png

效果:

72ff5b4959c344a49ea0a05cb077a8a0.png

7、图表实例

1、Area Charts 面积图

1)2D Area Charts 二维面积图

面积图类似于折线图,只是绘制线下方的区域被填充。

通过将分组设置为“standard”, “stacked” 或“percentStacked”可以获得不同的变体; “standard”是默认值。

b6b78210960dfdd3f8d7e017f2a9f03d.png

效果:

c2931047326b521bdffc5e2abd41c8cc.png

2)3D Area Charts 3D 面积图

490c9fa5491db1c2dc13a00ac1f3a058.png

效果:

f72d2d4ebb7a046278536fb1d6acbb54.png

2、Bar and Column Charts 条形图和柱形图

在条形图中,值被绘制为水平条或垂直柱。

1)Vertical, Horizontal and Stacked Bar Charts 垂直、水平和堆积条形图

以下设置会影响不同的图表类型:

  • 通过将 type 分别设置为 col 或 bar ,可以在垂直和水平条形图之间进行切换。

  • 使用堆积图表时,重叠需要设置为 100。

  • 如果条形图是水平的,则 x 轴和 y 轴是相反的。

d41a90e2c8f59322c9a4dee80f0d60fd.png

效果:

4c2303c261d70c709fbc655c5cf3eb07.png

2)3D Bar Charts3D 条形图

ac0b0d576c78e74c960fbdc1062b0427.png

效果:

12a4d76ce795037da960366381e57549.png

3、Bubble Charts 气泡图

气泡图与散点图非常相似,但气泡图可以增加第三个柱形来指定所显示的气泡的大小,以便表示数据系统中的数据点。

c2cdb28e0a9182d37f69b51662231cb2.png

效果:

c9d642825c35dbbde70da32656ebcb3c.png

4、Line Charts 折线图

1)Line Charts 折线图

在折线图中,类别数据沿水平轴均匀分布,所有值数据沿垂直轴均匀分布。有三种折线图:standard, stacked ,percentStacked。

1b9ad6626eb80dc4242a547b1508f3b7.png

效果:

86d6a09b19ac069ec55fdc867b181141.png

2)3D Line Charts 3D 折线图

3D折线图将每个数据行或数据列显示为一个三维条带。三维折线图有水平坐标轴、垂直坐标轴和竖坐标轴。

5cf543f2ec1381c0baa67b96174b8094.png

效果:

0b787d9c7d2904d1434b66688c5a64da.png

5、Scatter Charts 散点图

散点图,又称xy图,它将 X 值和 Y 值合并到单一数据点并按不均匀的间隔或簇来显示它们。

散点图通常用于显示和比较数值,例如科学数据、统计数据和工程数据。

散点图有以下几种类型:‘line’、‘lineMarker’、‘marker’、‘smooth’、‘smoothMarker’。

30bb29fc5c22c79926662deb6c438e7f.png

效果:

bd03ed9032a6da36effe190242c91452.png

6、Pie Charts饼图

1)Pie Charts饼图

饼图将数据绘制为圆形切片,每个切片代表整体的百分比。切片按顺时针方向绘制,0° 位于圆的顶部。

饼图只能获取单个系列的数据,图表的标题将默认为系列的标题。

b30a85c4bd3d95d140d27be147302ff2.png

效果:

d6c00494c30cec376fe15339baf0079b.png

2)Projected Pie Charts 复合饼图

复合饼图从饼图中提取一些切片并将它们投影到第二个饼图或条形图中。当数据系列中有几个较小的项目时,这很有用。

图表可以根据百分比percent、值 val(ue) 或位置 pos(ition)进行拆分。如果未设置任何内容,则应用程序决定使用哪个。此外,可以定义自定义拆分。

04423874ef6fb28be8a253635fc2a449.png

效果:

c2e17385cb72d14873590da016b98c34.png

3)3D Pie Charts 3D 饼图

1c019b1f5e5ee67905abe7c393e90ebc.png

效果:

fcddaf98f806b85914aceab91fcd6589.png

7、Doughnut Charts 圆环图

仅排列在工作表的列或行中的数据可以绘制为圆环图。

像饼图一样,圆环图也显示了部分与整体的关系,但圆环图可以包含多个数据系列,并且它们使用的是环而不是圆形。

00d095857f178270e6273eef30d76023.png

效果:

05244a286945bd31785e1952f8338011.png

 8、Radar Charts 雷达图

在工作表中以列或行的形式排列的数据可以绘制为雷达图。雷达图比较若干数据系列的聚合值。

雷达图有两种类型:标准型standard,即用线标记的区域;以及填充型filled,即整个区域都被填充。


标记marker 类型没有作用,如果需要标记,可以为相关系列设置这些标记。

ff19d18ff6395262a12e749cbf9141db.png

效果:

9108395f71ec05e6805b2362e8c9eb67.png

9、Stock Charts 股价图

以特定顺序排列在工作表的列或行中的数据可以绘制为股价图。顾名思义,股价图可以显示股价的波动。 不过这种图表也可以显示其他数据(如日降雨量和每年温度)的波动。 

必须按正确的顺序组织数据才能创建股价图。例如,要创建一个简单的盘高-盘低-收盘图(high-low-close),应该按照最高价、最低价和收盘价作为列标题的顺序排列数据。

股价图有两种类型:

  • 盘高-盘低-收盘图(high-low-close)本质上是一个没有线条且标记设置为XYZ的折线图。它还将 hiLoLines 设置为 True。

  • 开盘-盘高-盘低-收盘图(open-high-low-close) 与盘高-盘低-收盘图(high-low-close)图表相同,每个数据点的标记设置为 XZZ 和 upDownLines。

也可以通过将股价图与交易量的条形图相结合来添加交易量。

24451dd858fe7121df083c427946d5ef.png

效果:

ef2fc0c563924520a7ddf97354d872d1.png

10、Surface charts 曲面图

在工作表中以列或行的形式排列的数据可以绘制为曲面图。如果希望得到两组数据间的最佳组合,曲面图将很有用。

例如在地形图上,颜色和图案表示具有相同取值范围的地区。当类别和数据系列都是数值时,可以创建曲面图。

默认情况下,所有曲面图都是 3D的。可以通过设置旋转和透视来创建 2D 框架图(2D wireframe) 和曲面图 (contour)。

3035fcbe057d5f91e7dda54008b87a52.png

效果:

8346e1f7fb4e60c1b1a2ca98fe7b1b2b.png

今天的内容完成啦,为持续学习的你点个赞吧🤞

想要文中所有图片对应的代码,可以在后台回复【openpyxl图表】来获取哦~👇

已经到底啦~(≧▽≦*)/~

4b99b3aa206eac523383b164b6e508e8.png 往 期 推 荐 6e9c6e12e9c7b9831d9c15c4411583ec.png

如何用Python做日历?

2022-01-10

e36323b5bc9b60f276bb27889e3bae5e.png

Python实战:个人贷款计算

2022-01-14

b397f43d88c80a12dfa43051fadaab53.png

年会将近?赶紧学学如何用Python做个抽奖界面

2022-01-02

8eac57d8bd71d678c634d137ca4db32a.png

5个在线工具推荐

2021-12-29

2547b45df307dd7d75a148a37efe3bb7.png

4d12179c56d59819973ee8897f80850a.gif

您的“点赞”、“在看”和 “分享”是我们产出的动力。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐