Python对于Excel的一些基本绘制图标操作,让你日常工作更加轻松

前言

在Python中,我们可以利用第三方库来方便地操作Excel文件。这里使用python-excel.org中提供的openpyxl库,用于读写Excel 2007及以上版本的Excel文件。可以让我们日常工作中对于Excel方面的处理更加的方便

本人对于Python学习创建了一个小小的学习圈子,为各位提供了一个平台,大家一起来讨论学习Python。欢迎各位到来Python学习群:960410445一起讨论视频分享学习。Python是未来的发展方向,正在挑战我们的分析能力及对世界的认知方式,因此,我们与时俱进,迎接变化,并不断的成长,掌握Python核心技术,才是掌握真正的价值所在。

安装

使用pip安装工具来安装openpyxl,安装需要打开系统命令行(win +R)输入CMD

pip install openpyxl

即可安装。

初识操作代码

下面的代码用于创建Excel工作簿并在工作表中写入数据:

运行代码实现效果:

垂直、水平和堆积条形图

注意,下列设置影响不同的图表类型:

通过设置type为col或bar在垂直和水平条形图之间切换

当使用堆积图时,overlap需要被设置成100

如果条形是水平的,那么x和y轴相反

下面的代码用于创建不同型式的条形图:

from openpyxl import Workbook

from openpyxl.chart import BarChart, Series, Reference

wb= Workbook(write_only=True)

ws= wb.create_sheet()

rows= [

('Number','Batch 1', 'Batch2'),

(2, 10, 30),

(3, 40, 60),

(4, 50, 70),

(5, 20, 10),

(6, 10, 40),

(7, 50, 30),

]

for row in rows:

ws.append(row)

chart1= BarChart()

chart1.type= "col"

chart1.style= 10

chart1.title= "Bar Chart"

chart1.y_axis.title= 'Test number'

chart1.x_axis.title= 'Sample length (mm)'

data= Reference(ws, min_col=2, min_row=1, max_row=7, max_col=3)

cats= Reference(ws, min_col=1, min_row=2, max_row=7)

chart1.add_data(data,titles_from_data=True)

chart1.set_categories(cats)

chart1.shape= 4

ws.add_chart(chart1,"A10")

from copy import deepcopy

chart2= deepcopy(chart1)

chart2.style= 11

chart2.type= "bar"

chart2.title= "Horizontal Bar Chart"

ws.add_chart(chart2,"G10")

chart3= deepcopy(chart1)

chart3.type= "col"

chart3.style= 12

chart3.grouping= "stacked"

chart3.overlap= 100

chart3.title= 'Stacked Chart'

ws.add_chart(chart3,"A27")

chart4= deepcopy(chart1)

chart4.type= "bar"

chart4.style= 13

chart4.grouping= "percentStacked"

chart4.overlap= 100

chart4.title= 'Percent Stacked Chart'

ws.add_chart(chart4,"G27")

wb.save("bar.xlsx")

运行效果:

三维条形图

也可以创建三维条形图,代码如下:

from openpyxl import Workbook

from openpyxl.chart import (

Reference,

Series,

BarChart3D,

)

wb= Workbook()

ws= wb.active

rows= [

(None, 2013, 2014),

("Apples",5, 4),

("Oranges",6, 2),

("Pears",8, 3)

]

for row in rows:

ws.append(row)

data= Reference(ws, min_col=2, min_row=1, max_col=3, max_row=4)

titles= Reference(ws, min_col=1, min_row=2, max_row=4)

chart= BarChart3D()

chart.title= "3D Bar Chart"

chart.add_data(data=data,titles_from_data=True)

chart.set_categories(titles)

ws.add_chart(chart,"A6")

wb.save("bard.xlsx")

效果图:

股价图

不同形式股价图的特定格式选项:

高-低-收盘形式股价图实际上是一个不带线条的折线图,其标记设置为XYZ,并将hiLoLines设置为True。

开盘-高-低-收盘形式股价图就像一个带有标记的高-低-收盘股价图,每个数据点设置为XYZ和upDownLines。

可以通过组合股价图和条形图来添加表示成交量的条形。

基本的代码如下:

from datetime import date

from openpyxl import Workbook

from openpyxl.chart import (

BarChart,

StockChart,

Reference,

Series,

)

from openpyxl.chart.axis import DateAxis,ChartLines

from openpyxl.chart.updown_bars import UpDownBars

wb= Workbook()

ws= wb.active

rows= [

['日期','成交量','开盘','高','低','收盘'],

['2018-11-10',20000,26.20,27.20,23.49,25.45,],

['2018-11-11',10000,25.45,25.03,19.55,23.05,],

['2018-11-12',15000,23.05,24.46,20.03,22.42,],

['2018-11-13',2000,22.42,23.97,20.07,21.90,],

['2018-11-14',12000,21.9,23.65,19.50,21.51,],

]

for row in rows:

ws.append(row)

# 高-低-收盘

c1= StockChart()

labels= Reference(ws, min_col=1, min_row=2, max_row=6)

data= Reference(ws, min_col=4, max_col=6, min_row=1, max_row=6)

c1.add_data(data,titles_from_data=True)

c1.set_categories(labels)

for s in c1.series:

s.graphicalProperties.line.noFill= True

# 标记收盘

s.marker.symbol= "dot"

s.marker.size= 5

c1.title= "高-低-收盘"

c1.hiLowLines= ChartLines()

from openpyxl.chart.data_source import NumData, NumVal

pts= [NumVal(idx=i) for i in range(len(data)- 1)]

cache= NumData(pt=pts)

c1.series[-1].val.numRef.numCache=cache

ws.add_chart(c1, "A10")

# 开盘-高-低-收盘

c2= StockChart()

data= Reference(ws, min_col=3, max_col=6, min_row=1, max_row=6)

c2.add_data(data,titles_from_data=True)

c2.set_categories(labels)

for s in c2.series:

s.graphicalProperties.line.noFill= True

c2.hiLowLines= ChartLines()

c2.upDownBars= UpDownBars()

c2.title= "开盘-高-低-收盘"

c2.series[-1].val.numRef.numCache= cache

ws.add_chart(c2,"G10")

# 创建条形图代表成交量

bar= BarChart()

data= Reference(ws, min_col=2, min_row=1, max_row=6)

bar.add_data(data,titles_from_data=True)

bar.set_categories(labels)

from copy import deepcopy

# 成交量-高-低-收盘价

b1= deepcopy(bar)

c3= deepcopy(c1)

c3.y_axis.majorGridlines=None

c3.y_axis.title= "价格"

b1.y_axis.axId= 20

b1.z_axis= c3.y_axis

b1.y_axis.crosses= "max"

b1+= c3

c3.title= "高低收盘成交量"

ws.add_chart(b1,"A27")

# 成交量-开盘-高-低-收盘

b2= deepcopy(bar)

c4= deepcopy(c2)

c4.y_axis.majorGridlines= None

c4.y_axis.title= "价格"

b2.y_axis.axId= 20

b2.z_axis= c4.y_axis

b2.y_axis.crosses= "max"

b2+= c4

ws.add_chart(b2,"G27")

wb.save("stock.xlsx")

实现效果图:

气泡图

气泡图与散点图相似,但使用第三维来决定气泡的大小,可以包括多个系列。

下面的代码创建气泡图:

from openpyxl import Workbook

from openpyxl.chart import Series, Reference, BubbleChart

wb= Workbook()

ws= wb.active

rows= [

("Numberof Products", "Sales in USD","Market share"),

(14, 12200, 15),

(20, 60000, 33),

(18, 24400, 10),

(22, 32000, 42),

(),

(12, 8200, 18),

(15, 50000, 30),

(19, 22400, 15),

(25, 25000, 50),

]

for row in rows:

ws.append(row)

chart= BubbleChart()

chart.style= 18 #使用预设的样式

# 添加第一个数据系列

xvalues= Reference(ws, min_col=1, min_row=2, max_row=5)

yvalues= Reference(ws, min_col=2, min_row=2, max_row=5)

size= Reference(ws, min_col=3, min_row=2, max_row=5)

series= Series(values=yvalues, xvalues=xvalues, zvalues=size, title="2013")

chart.series.append(series)

# 添加第二个数据系列

xvalues= Reference(ws, min_col=1, min_row=7, max_row=10)

yvalues= Reference(ws, min_col=2, min_row=7, max_row=10)

size= Reference(ws, min_col=3, min_row=7, max_row=10)

series= Series(values=yvalues, xvalues=xvalues, zvalues=size, title="2014")

chart.series.append(series)

# 在以单元格A12开始的单元格中放置图表

ws.add_chart(chart,"A12")

wb.save("bubble.xlsx")

效果图:

以上就是Python关于Excel的一些基本操作,当然了,Python对于Excel方面的操作肯定不止于此。未完待续.................

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,176评论 5 469
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,190评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,232评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,953评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,879评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,177评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,626评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,295评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,436评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,365评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,414评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,096评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,685评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,771评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,987评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,438评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,032评论 2 341

推荐阅读更多精彩内容