python绘制柱形图形添加图标_Python对于Excel的一些基本绘制图标操作,让你日常工作更加轻松...

前言

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

安装

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

pip install openpyxl

即可安装。

初识操作代码

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

运行代码实现效果:d1cd613236fe81d638c52d91621c0014107c2681.jpg

垂直、水平和堆积条形图

注意,下列设置影响不同的图表类型:通过设置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")

运行效果:20ec0439157ebc67290af98947b1ee0376e53022.jpg

三维条形图

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

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")

效果图:17f566fe647560b684375b572eb60e2f2dcedaeb.jpg

股价图

不同形式股价图的特定格式选项:高-低-收盘形式股价图实际上是一个不带线条的折线图,其标记设置为XYZ,并将hi****nes设置为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")

实现效果图:ec43c355b5fe2da9d50acdc6945085de31323b24.jpg

气泡图

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

下面的代码创建气泡图:

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")

效果图:7cea0747df878791cc9969d5b4b89c6508545552.jpg

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值