日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
對比Excel,用Python繪制柱狀圖時添加Table數(shù)據(jù)表

本文轉(zhuǎn)載自微信公眾號「可以叫我才哥」,作者才哥。轉(zhuǎn)載本文請聯(lián)系可以叫我才哥公眾號。

創(chuàng)新互聯(lián)專注于做網(wǎng)站、成都網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網(wǎng)絡(luò)營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴謹?shù)膽B(tài)度對待客戶,用專業(yè)的服務(wù)創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

大家好,我是才哥。

最近在做數(shù)據(jù)可視化的時候,希望在圖上同時顯示數(shù)據(jù)表。關(guān)于這個需求,用excel可以比較方便,直接快速布局中選擇布局5即可。那么,如果我們想用python也來完成這項任務(wù),可以怎么做呢?

期望效果預覽:

excel作圖效果

1. Excel簡單繪制

就很簡單了,直接選中數(shù)據(jù)插入柱狀圖,然后在圖表工具-設(shè)計-快速布局中選擇相應(yīng)的布局即可。

案例數(shù)據(jù)及效果

excel圖表設(shè)計->快速布局—>布局5

2. Python繪制

那這里我們用到的是matplotlib,bar和table。

將圖表元素進行拆解,可以分為柱狀圖和數(shù)據(jù)表,剛好matplotlib提供了對應(yīng)的接口。

2.1 柱狀圖繪制

先繪制柱狀圖,案例中是兩組數(shù)據(jù),所以是組合柱狀圖。在本次繪制中,有以下幾個知識點,可以記一記:

  • 設(shè)置標題時的位置(用參數(shù)x,y指定)
  • 設(shè)置坐標軸標題時用參數(shù)rotation旋轉(zhuǎn)方向
  • 設(shè)置坐標軸區(qū)間范圍
  • 顯示數(shù)據(jù)標簽(用ax.bar_label方法)
 
 
 
 
  1. import numpy as np 
  2. import matplotlib.pyplot as plt 
  3.  
  4. # 中文及負數(shù)顯示 
  5. plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] 
  6. plt.rcParams['axes.unicode_minus'] = False 
  7.  
  8. # 創(chuàng)建畫布 
  9. fig, ax = plt.subplots(figsize=(10, 4), dpi=100) 
  10.  
  11. # 案例數(shù)據(jù) 
  12. data = [[150, 200,  -50, -100,  -75], 
  13.         [300, 125,  -80,  75, -100], 
  14.         ] 
  15. # 列與行 
  16. columns = ('周一', '周二', '周三', '周四', '周五') 
  17. rows = ['才哥', '楠楠'] 
  18.  
  19. # 作圖參數(shù) 
  20. index = np.arange(len(columns))-0.1 
  21. bar_width = 0.4 
  22.  
  23. # 設(shè)置柱狀圖顏色 
  24. colors = ['turquoise', 'coral'] 
  25.  
  26. # 柱狀圖 
  27. bar1 = plt.bar(index, data[0],  
  28.                bar_width, color=colors[0], edgecolor='grey') 
  29. bar2 = plt.bar(index+bar_width, data[1], 
  30.                bar_width, color=colors[1], edgecolor='grey') 
  31.  
  32. # 設(shè)置標題 
  33. ax.set_title('工作日收益情況', fontsize=16, y=1.1,x=0.44) 
  34. # 設(shè)置坐標軸標題 
  35. ax.set_ylabel("元", fontsize=12, color='black', alpha=0.7, rotation=360) 
  36. # 設(shè)置Y軸區(qū)間 
  37. ax.set_ylim(-150, 350) 
  38.  
  39. # 顯示數(shù)據(jù)標簽 
  40. ax.bar_label(bar1, label_type='edge') 
  41. ax.bar_label(bar2, label_type='edge') 
  42.  
  43. # x,y軸刻度不顯示 
  44. ax.tick_params(axis=u'both', which=u'both', length=0) 
  45. # x軸刻度及刻度值不顯示 
  46. plt.xticks([]) 

輸出如下:

組合柱狀圖

2.2. 圖表table繪制

先看看圖表table的繪制,我們拿案例數(shù)據(jù)來單獨繪制看看:

 
 
 
 
  1. # 創(chuàng)建畫布 
  2. fig, ax = plt.subplots(figsize=(10, 4), dpi=100) 
  3. # table圖表 
  4. the_table = plt.table(cellText=data,  
  5.                       rowLabels=rows,rowColours=colors, 
  6.                       colLabels=columns, cellLoc='center', loc="bottom", 
  7.                       bbox=[0, -0.4, 1, 0.24] 
  8.                       ) 

輸出如下:

table

關(guān)于 plt.table的參數(shù)介紹如下:

cellText:表格單元格文本,字符串中的換行符暫不支持,可能導致文本超出單元格邊界

cellColours:表格單元格背景色

cellLoc:表格單元格文本的對齊方式,取值范圍為{'left', 'center', 'right'},默認值為'right'

colWidths:表格單元格寬度

rowLabels:表格行表頭文本

rowColours:表格行表頭背景色

rowLoc:表格行表頭文本的對齊方式,取值范圍為{'full', 'left', 'right'},默認值為'left'

colLabels:表格列表頭文本

colColours:表格列表頭背景色

colLoc:表格列表頭文本的對齊方式,取值范圍為{'full', 'left', 'right'},默認值為'left'

loc:單元格相對于子圖的位置

bbox:繪制表格的邊界框

最后,我們需要做的就是將上述兩個圖進行組合,組合過程中可能需要做一些格式微調(diào)。

2.3. 組合

在本次案例中,對組合圖需求有以下幾點:

  • 柱狀圖邊框不顯示
  • 圖表table中列名高度需要高一些,單元格的高度要低一些
  • 圖例位置需要和對應(yīng)行一致

為了實現(xiàn)上訴需求,我們可以通過以下方式來處理:

 
 
 
 
  1. # 設(shè)置單元格高度 
  2. cellDict = the_table.get_celld() 
  3. for i in range(0, len(columns)): 
  4.     cellDict[(0, i)].set_height(0.6) 
  5.     for j in range(1, len(rows)+1): 
  6.         cellDict[(j, i)].set_height(0.4) 
  7.  
  8. # 設(shè)置圖表table中行名單元格的高度 
  9. cellDict[(1, -1)].set_height(0.4) 
  10. cellDict[(2, -1)].set_height(0.4) 
  11.  
  12. # 設(shè)置圖表table單元格文本字體 
  13. the_table.auto_set_font_size(False) 
  14. the_table.set_fontsize(10) 
  15.  
  16. # 設(shè)置圖表table單元格邊框 
  17. for key, cell in the_table.get_celld().items(): 
  18.     cell.set_linewidth(0.6) 
  19.  
  20. # 邊框隱藏 
  21. ax.spines['top'].set_visible(False) 
  22. ax.spines['right'].set_visible(False) 
  23. ax.spines['bottom'].set_visible(False) 
  24. ax.spines['left'].set_visible(False) 
  25.  
  26. name = ['', ''] 
  27. # 設(shè)置圖例的位置 
  28. ax.legend(name, handlelength=0.7, labelspacing=0.6, 
  29.           bbox_to_anchor=(-0.1, -0.23), 
  30.           loc='upper left', frameon=False) 

最終,我們可以得到比較滿意的效果:

最終效果

以上就是本次全部內(nèi)容,大家可以修改參數(shù)多試試以熟悉掌握。


分享名稱:對比Excel,用Python繪制柱狀圖時添加Table數(shù)據(jù)表
文章URL:http://www.dlmjj.cn/article/djjeeij.html