案例01 制作柱形圖展示數(shù)據(jù)的對比關系——員工銷售業(yè)績統(tǒng)計表.xlsx
import xlwings as xw
app = xw.App(visible=True, add_book=False)
workbook = app.books.open('員工銷售業(yè)績統(tǒng)計表.xlsx') # 打開要制作圖表的工作簿
for i in workbook.sheets: # 遍歷工作簿中的工作表
chart = i.charts.add(left=200, top=0, width=355, height=211) # 設置圖表的位置和尺寸
chart.set_source_data(i['A1'].expand()) # 讀取工作表中要制作圖表的數(shù)據(jù)
chart.chart_type = 'column_clustered' # 制作柱形圖
workbook.save('柱形圖.xlsx')
workbook.close()
app.quit()
運行結(jié)果打開柱形圖.xlsx即可查看
?用特定含義的字符串來指定圖表類型,常用圖表類型對應的字符串如下:
圖表類型 字符串 圖表類型 字符串 柱形圖 ‘column_clustered' 餅圖 'pie'
條形圖 'bar_clustered' 圓環(huán)圖 ‘doughnut’ 折線圖 ‘line’ 散點圖 ‘xy_scatter' 面積圖 ’area‘ 雷達圖 ’radar‘
批量制作條形圖
import xlwings as xw
app = xw.App(visible = True, add_book = False)
workbook = app.books.open('員工銷售業(yè)績統(tǒng)計表.xlsx')
for i in workbook.sheets:
chart = i.charts.add(left = 200, top = 0, width = 355, height = 211)
chart.set_source_data(i['A1'].expand('table'))
chart.chart_type = 'bar_clustered' # 制作條形圖
workbook.save('條形圖.xlsx')
workbook.close()
app.quit()
案例02 制作折線圖展示數(shù)據(jù)的變化趨勢——月銷售表.xlsx
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
df = pd.read_excel('月銷售表.xlsx')
figure = plt.figure()
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['月份']
y = df['銷售額']
plt.plot(x, y, color = 'red', linewidth = '3', linestyle = 'solid') # 制作折線圖
plt.title(label = '月銷售額趨勢圖', fontdict = {'color' : 'black', 'size' : 30}, loc = 'center') # 添加并設置圖表標題
for a,b in zip(x,y): # 遍歷折線圖表標題
plt.text(a, b + 0.2, (a, '%.0f' % b), ha = 'center', va = 'bottom', fontsize = 10) # 添加并設置數(shù)據(jù)標簽
plt.axis('off') # 隱藏坐標軸
app = xw.App(visible = False) # 啟動Excel程序
workbook = app.books.open('月銷售表.xlsx') # 打開要插入圖表的工作簿
worksheet = workbook.sheets['Sheet1'] #選中工作表”Sheet1“
worksheet.pictures.add(figure, name = '圖片1', update = True, left = 200) # 在工作表中插入制作的折線圖
workbook.save('折線圖.xlsx')
workbook.close()
app.quit()
運行結(jié)果:
?
axis()函數(shù)的參數(shù)值為’off’時表示不顯示圖表坐標軸,為‘on'時表示顯示圖表坐標軸??
制作折線圖并為最高點添加數(shù)據(jù)標簽
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
df = pd.read_excel('月銷售表.xlsx')
figure = plt.figure()
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['月份']
y = df['銷售額']
plt.plot(x, y, color = 'red', linewidth = '3', linestyle = 'solid') # 制作折線圖
plt.title(label = '月銷售額趨勢圖', fontdict = {'color' : 'black', 'size' : 30}, loc = 'center') # 添加并設置圖表標題
max1 = df['銷售額'].max() # 獲取最高銷售額
df_max = df[df['銷售額']== max1] # 選取最高銷售額對應的行數(shù)據(jù)
for a,b in zip(df_max['月份'],df_max['銷售額']): # 遍歷折線圖表標題
plt.text(a, b + 0.05, (a, '%.0f' % b), ha = 'center', va = 'bottom', fontsize = 10) # 添加并設置數(shù)據(jù)標簽
plt.axis('off') # 隱藏坐標軸
app = xw.App(visible = False) # 啟動Excel程序
workbook = app.books.open('月銷售表.xlsx') # 打開要插入圖表的工作簿
worksheet = workbook.sheets['Sheet1'] #選中工作表”Sheet1“
worksheet.pictures.add(figure, name = '圖片1', update = True, left = 200) # 在工作表中插入制作的折線圖
workbook.save('顯示最高點數(shù)據(jù)標簽的折線圖.xlsx')
workbook.close()
app.quit()
運行結(jié)果:
?
制作平滑折線圖
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate
import xlwings as xw
df = pd.read_excel('月銷售表.xlsx')
figure = plt.figure()
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['月份']
y = df['銷售額']
xnew = np.arange(1, 12, 0.1)
func = interpolate.interp1d(x, y, kind = 'cubic')
ynew = func(xnew)
plt.plot(xnew, ynew, color = 'red', linewidth = '3', linestyle = 'solid') # 制作平滑折線圖
plt.title(label = '月銷售額趨勢圖',fontdict = {'color' : 'black', 'size' : 30}, loc = 'center')
plt.xlabel('月份', fontdict = {'family' : 'SimSun', 'color' : 'black', 'size' : 20}, labelpad = 20)
plt.ylabel('銷售額', fontdict = {'family' : 'SimSun', 'color' : 'black', 'size' : 20}, labelpad = 20)
plt.xlim(0, 12) # 設置圖表x軸的取值范圍
app = xw.App(visible = False)
workbook = app.books.open('月銷售表.xlsx')
worksheet = workbook.sheets['Sheet1']
worksheet.pictures.add(figure, name = '圖片1', update = True, left = 200)
workbook.save('平滑折線圖.xlsx')
workbook.close()
app.quit()
運行結(jié)果:
?arange()是NumPy模塊中的函數(shù),用于創(chuàng)建等差數(shù)組。
語法格式:
arange(start,stop,step)
參數(shù) 說明 start 起始值??蛇x參數(shù),默認從0開始 stop 結(jié)束值。生成的數(shù)組不包含結(jié)束值 step 步長。可選參數(shù),默認步長為1,如果指定了step,還必須給出start
案例03 制作散點圖判斷兩組數(shù)據(jù)的相關性——汽車速度和剎車距離表.xlsx
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
df = pd.read_excel('汽車速度和剎車距離表.xlsx')
figure = plt.figure()
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['汽車速度(km/h)']
y = df['剎車距離(m)']
plt.scatter(x, y, s = 400, color = 'red', marker = 'o', edgecolor = 'black') # 制作散點圖
plt.xlabel('汽車速度(km/h)', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 20}, labelpad = 20) # 添加并設置x軸標題
plt.ylabel('剎車距離(m)', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 20}, labelpad = 20) # 添加并設置y軸標題
plt.title('汽車速度與剎車距離關系圖', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 30}, loc = 'center') # 添加并設置圖表標題
app = xw.App(visible = False) # 啟動Excel程序
workbook = app.books.open('汽車速度和剎車距離表.xlsx') # 打開要插入圖表的工作簿
worksheet = workbook.sheets[0] # 選中第1個工作表
worksheet.pictures.add(figure, name = '圖片1', update = True, left = 200) # 在工作表中插入制作的散點圖
workbook.save('散點圖.xlsx')
workbook.close()
app.quit()
?運行結(jié)果:
scatter()是Matplotlib模塊中的函數(shù),用于制作散點圖。
語法格式:
scatter(x,y,s,color,marker,linewidth,edgecolor)
參數(shù) 說明 x x坐標的值 y y坐標的值 s 每個點的面積。如果該參數(shù)只有一個值或者省略該參數(shù),表示所有點的大小都一樣;如果該參數(shù)有多個值,則表示每個點的大小都不一樣,此時散點圖就變成了氣泡圖 color 每個點的填充顏色。即可以為所有點填充同一種顏色,也可以為不同的點填充不同的顏色 marker 每個點的形狀。 linewidth 每個點的邊框粗細 edgecolor 每個點的邊框顏色
為散點圖添加線性趨勢線
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
from sklearn import linear_model
df = pd.read_excel('汽車速度和剎車距離表.xlsx')
figure = plt.figure()
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['汽車速度(km/h)']
y = df['剎車距離(m)']
plt.scatter(x, y, s = 400, color = 'red', marker = 'o', edgecolor = 'black')
plt.xlabel('汽車速度(km/h)', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 20}, labelpad = 20)
plt.ylabel('剎車距離(m)', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 20}, labelpad = 20)
plt.title('汽車速度與剎車距離關系圖', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 30}, loc = 'center')
model = linear_model.LinearRegression().fit(x.values.reshape(-1,1), y)
pred = model.predict(x.values.reshape(-1,1))
plt.plot(x, pred, color = 'black', linewidth = '3', linestyle = 'solid', label = '線性趨勢線') # 繪制線性趨勢線
plt.legend(loc = 'upper left')
app = xw.App(visible = False)
workbook = app.books.open('汽車速度和剎車距離表.xlsx')
worksheet = workbook.sheets[0]
worksheet.pictures.add(figure, name = '圖片1', update = True, left = 200)
workbook.save('為散點圖添加線性趨勢線.xlsx')
workbook.close()
app.quit()
運行結(jié)果:
?
制作氣泡圖——氣泡圖.xlsx
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
df = pd.read_excel('氣泡圖.xlsx')
figure = plt.figure()
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['銷售量']
y = df['利潤(萬)']
z = df['產(chǎn)品名稱']
plt.scatter(x, y, s = y * 100, color = 'red', marker = 'o')
plt.xlabel('銷售量', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 20}, labelpad = 20)
plt.ylabel('利潤(萬)', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 20}, labelpad = 20)
plt.title('銷售量與利潤關系圖', fontdict = {'family' : 'Microsoft YaHei', 'color' : 'black', 'size' : 30}, loc = 'center')
for a, b, c in zip(x, y, z):
plt.text(a, b, c, ha = 'center', va = 'center', fontsize = 30, color = 'white')
plt.xlim(0, 800)
plt.ylim(0, 120)
app = xw.App(visible = False)
workbook = app.books.open('氣泡圖.xlsx')
worksheet = workbook.sheets[0]
worksheet.pictures.add(figure, name = '圖片1', update = True, left = 200)
workbook.save('氣泡圖1.xlsx')
workbook.close()
app.quit()
運行結(jié)果:
案例04 制作餅圖展示部分和總體的比例關系——餅圖.xlsx
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
df = pd.read_excel('餅圖.xlsx')
figure = plt.figure()
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['產(chǎn)品名稱']
y = df['銷售額']
plt.pie(y, labels = x, labeldistance = 1.1, autopct = '%.2f%%', pctdistance = 0.8, startangle = 90, radius = 1.0, explode = [0, 0, 0, 0, 0, 0.3, 0]) # 制作餅圖并分離餅圖塊
plt.title(label = '產(chǎn)品銷售額占比圖', fontdict = {'color' : 'black', 'size' : 30}, loc = 'center') # 添加并設置圖表標題
app = xw.App(visible = False)
workbook = app.books.open('餅圖.xlsx')
worksheet = workbook.sheets[0]
worksheet.pictures.add(figure, name = '圖片1', update = True, left = 200) # 在工作表中插入制作的餅圖
workbook.save()
workbook.close()
app.quit()
運行結(jié)果:
?
pie()是Matplotlib模塊中的函數(shù),?用于制作餅圖。
語法格式:
pie(x,explode,labels,colors,autopct,pctdistance,shadow,labeldistance,startangle,radius,counterclock,center,frame)
參數(shù) 說明 x 餅圖塊的數(shù)據(jù)系列值 explode 一個列表,指定每一個餅圖塊與圓心的距離 labels 每一個餅圖塊的數(shù)據(jù)標簽內(nèi)容 colors 每一個餅圖塊的填充顏色 autopct 每一個餅圖塊的百分比數(shù)值的格式 pctdistance 百分比數(shù)值與餅圖塊中心的距離 shadow
是否為餅圖繪制陰影 labeldistance 數(shù)據(jù)標簽與餅圖塊中心的距離 startangle 數(shù)據(jù)的第一個值對應的餅圖塊在餅圖中的初始角度 radius 餅圖的半徑 counterclock 是否讓餅圖逆時針顯示 center 餅圖的中心位置 frame 是否顯示餅圖背后的圖框
制作圓環(huán)圖——餅圖.xlsx
為pie()函數(shù)適當設置參數(shù)wedgeprops的值,就能制作出圓環(huán)圖。
import pandas as pd
import matplotlib.pyplot as plt
import xlwings as xw
df = pd.read_excel('餅圖.xlsx')
figure = plt.figure()
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = df['產(chǎn)品名稱']
y = df['銷售額']
plt.pie(y, labels = x, autopct = '%.2f%%', pctdistance = 0.85, radius = 1.0, labeldistance = 1.1, wedgeprops = {'width' : 0.3, 'linewidth' : 2, 'edgecolor' : 'white'}) # 用讀取的數(shù)據(jù)制作圓環(huán)圖
plt.title(label = '產(chǎn)品銷售額占比圖', fontdict = {'color' : 'black', 'size' : 30}, loc = 'center')
app = xw.App(visible = False)
workbook = app.books.open('餅圖.xlsx')
worksheet = workbook.sheets[0]
worksheet.pictures.add(figure, name = '圖片1', update = True, left = 200)
workbook.save()
workbook.close()
app.quit()
運行結(jié)果:
?
案例05 制作雷達圖對比多項指標——雷達圖.xlsx
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_excel('雷達圖.xlsx')
df = df.set_index('性能評價指標') # 將數(shù)據(jù)中的'性能評價指標'列設置為行索引
df = df.T # 轉(zhuǎn)置數(shù)據(jù)表格
df.index.name = '品牌' # 將轉(zhuǎn)置后數(shù)據(jù)中行索引那一列的名稱修改為“品牌”
def plot_radar(data, feature): # 自定義一個函數(shù)用于制作雷達圖
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
cols = ['動力性', '燃油經(jīng)濟性', '制動性', '操控穩(wěn)定性', '行駛平順性', '通過性', '安全性', '環(huán)保性'] # 指定各個品牌要顯示的性能評價指標的名稱
colors = ['green', 'blue', 'red', 'yellow'] # 為每個品牌設置圖表中的顏色
angles = np.linspace(0.1 * np.pi, 2.1 * np.pi, len(cols), endpoint = False) # 根據(jù)要顯示的指標個數(shù)對圓進行等分
angles = np.concatenate((angles, [angles[0]])) # 連接刻度線數(shù)據(jù)
cols = np.concatenate((cols, [cols[0]]))
fig = plt.figure(figsize = (8, 8)) # 設置顯示圖表的窗口大小
ax = fig.add_subplot(111, polar = True) # 設置圖表在窗口中的顯示位置,并設置坐標軸為極坐標體系
for i, c in enumerate(feature):
stats = data.loc[c] # 獲取品牌對應的指標數(shù)據(jù)
stats = np.concatenate((stats, [stats[0]])) # 連接品牌的指標數(shù)據(jù)
ax.plot(angles, stats, '-', linewidth = 6, c = colors[i], label = '%s'%(c)) # 制作雷達圖
ax.fill(angles, stats, color = colors[i], alpha = 0.25) # 為雷達圖填充顏色
ax.legend() # 為雷達圖添加圖例
ax.set_yticklabels([]) # 隱藏坐標軸數(shù)據(jù)
ax.set_thetagrids(angles * 180 / np.pi, cols, fontsize = 16) # 添加并設置數(shù)據(jù)標簽
plt.show()
return fig
fig = plot_radar(df, ['A品牌', 'B品牌', 'C品牌', 'D品牌']) # 調(diào)用自定義函數(shù)制作雷達圖
運行結(jié)果:
知識延伸
1、linspace()是Numpy模塊中 的函數(shù),用于在指定的區(qū)間內(nèi)返回均價間隔的數(shù)字。
語法格式:
linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
參數(shù) 說明 start 區(qū)間的起始值 stop 區(qū)間的終止值 num 可選參數(shù),指定生成的樣本數(shù)。取值必須是非負數(shù),默認值為50 endpoint 可選參數(shù),指定終止值stop是否被包含在結(jié)果數(shù)組中。如果為True,則結(jié)果中一定會有終止值stop;如果為False,則結(jié)果中一定沒有終止值stop retstep、dtype 可選參數(shù),一般不使用 ?2、concatenate()函數(shù)用于一次完成多個數(shù)組的拼接。
語法格式:
concatenate((a1,a2,……),axis=0)
參數(shù):
(a1,a1,……):要拼接的數(shù)組
axis=0:拼接的軸向,通??梢允÷?/p>
3、add_subplot()函數(shù)用于在一張畫布上劃分區(qū)域,以繪制多張子圖。
4、fill()函數(shù)用于為由一組坐標值定義的多邊形區(qū)域填充顏色。
語法格式:
fill(x,y,color,alpha)
參數(shù):
x,y:多邊形各頂點的x坐標值和y坐標值列表
color:填充顏色
alpha:填充顏色的透明度
制作某一品牌性能評價指標雷達圖——雷達圖.xlsx
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_excel('雷達圖.xlsx')
df = df.set_index('性能評價指標')
df = df.T
df.index.name = '品牌'
def plot_radar(data, feature):
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
cols = ['動力性', '燃油經(jīng)濟性', '制動性', '操控穩(wěn)定性', '行駛平順性', '通過性', '安全性', '環(huán)保性']
colors = ['green', 'blue', 'red', 'yellow']
angles = np.linspace(0.1 * np.pi, 2.1 * np.pi, len(cols), endpoint = False)
angles = np.concatenate((angles, [angles[0]]))
cols = np.concatenate((cols, [cols[0]]))
fig = plt.figure(figsize = (8, 8))
ax = fig.add_subplot(111, polar = True)
for i, c in enumerate(feature):
stats = data.loc[c]
stats = np.concatenate((stats, [stats[0]]))
ax.plot(angles, stats, '-', linewidth = 6, c = colors[i], label = '%s'%(c))
ax.fill(angles, stats, color = colors[i], alpha = 0.25)
ax.legend()
ax.set_yticklabels([])
ax.set_thetagrids(angles * 180 / np.pi, cols, fontsize = 16)
plt.show()
return fig
fig = plot_radar(df, ['A品牌']) # 查看A品牌的性能評價指標情況
運行結(jié)果:
案例06 制作溫度計圖展示工作進度——溫度計圖.xlsx
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel('溫度計圖.xlsx')
sum = 0 # 定義變量sum,用于存儲全年的實際銷售業(yè)績
for i in range(12):
sum = df['銷售業(yè)績(萬元)'][i] + sum # 累加12個月的實際銷售業(yè)績,得到全年的實際銷售業(yè)績
goal = df['銷售業(yè)績(萬元)'][13] # 獲取全年的目標銷售業(yè)績
percentage = sum / goal # 計算全年的實際銷售業(yè)績占目標銷售業(yè)績的百分比
plt.bar(1, 1, color = 'yellow') # 制作柱形圖展示全年的目標銷售業(yè)績
plt.bar(1, percentage, color = 'cyan') # 制作柱形圖展示全年的實際銷售業(yè)績,設置填充顏色為青色
plt.xlim(0, 2) # 設置圖表x軸的取值范圍
plt.ylim(0, 1.2) # 設置圖表y軸的取值范圍
plt.text(1, percentage - 0.01, percentage, ha = 'center', va = 'top', fontdict = {'color' : 'black', 'size' : 20}) # 添加并設置數(shù)據(jù)標簽
plt.show() # 顯示制作的溫度計圖
運行結(jié)果:
?
制作上半年銷售業(yè)績的溫度計圖
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel('溫度計圖.xlsx')
sum = 0
for i in range(6):
sum = df['銷售業(yè)績(萬元)'][i] + sum
goal = df['銷售業(yè)績(萬元)'][13]
percentage = sum / goal
plt.bar(1, 1, color = 'yellow')
plt.bar(1, percentage, color = 'cyan')
plt.xlim(0, 2)
plt.ylim(0, 1.2)
plt.text(1, percentage - 0.01, percentage, ha = 'center', va = 'top', fontdict = {'color' : 'black', 'size' : 20})
plt.show()
運行結(jié)果:
?文章來源:http://www.zghlxwxcb.cn/news/detail-742527.html
使用python制作常用圖表?,這些案例中使用到的數(shù)據(jù)文件請點擊這里?【免費】使用python制作常用圖表所要使用的數(shù)據(jù).zip資源-CSDN文庫文章來源地址http://www.zghlxwxcb.cn/news/detail-742527.html
到了這里,關于使用python制作常用圖表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!