Python 如何利用pandas 和 matplotlib繪制柱狀圖
當你需要展示數(shù)據(jù)時,圖表是一個非常有用的工具。Python 中的 pandas 和 matplotlib 庫提供了豐富的功能,可以幫助你輕松地繪制各種類型的圖表。本文將介紹如何使用這兩個庫,繪制一個店鋪銷售數(shù)量的柱狀圖,并添加各種元素,如數(shù)據(jù)標簽、圖例、網格線等。
準備工作
在開始之前,你需要安裝 pandas 和 matplotlib 庫。如果你還沒有安裝,可以使用以下命令進行安裝
pip install pandas matplotlib
另外,為了在圖表中顯示中文,你需要下載并安裝中文字體文件。這里我們使用宋體,你可以替換為其他中文字體。下載后,將字體文件路徑替換到代碼中的 font
變量中
# 設置中文字體 font = FontProperties(fname='C:\\Windows\\Fonts\\simhei.ttf', size=12) # 替換為你的中文字體文件路徑和字體大小
數(shù)據(jù)準備
我們假設有一個 Excel 文件,其中包含多個店鋪的銷售數(shù)據(jù)。每個店鋪有多個訂單,每個訂單有一個銷售數(shù)量。我們需要對每個店鋪的銷售數(shù)量進行求和,并按照銷售數(shù)量降序排列。以下是數(shù)據(jù)準備的代碼:
import pandas as pd # 從Excel文件中讀取數(shù)據(jù) data = pd.read_excel('C:\\Users\Admin\\Desktop\\數(shù)據(jù)核對\\新建 XLSX 工作表.xlsx') # 聚合數(shù)據(jù) aggregated_data = data.groupby('店鋪名稱')['銷售數(shù)量'].sum() # 按銷售數(shù)量降序排列 aggregated_data = aggregated_data.sort_values(ascending=False) print(aggregated_data)
首先,我們使用 pandas 庫的 read_excel
函數(shù)讀取 Excel 文件中的數(shù)據(jù)。然后,使用 groupby
函數(shù)對數(shù)據(jù)進行聚合,按照店鋪名稱分組,并對每個組中的銷售數(shù)量求和。最后,使用 sort_values
函數(shù)按照銷售數(shù)量降序排列。
繪制柱狀圖
接下來,我們使用 matplotlib 庫繪制柱狀圖。以下是繪制柱狀圖的代碼:
import matplotlib.pyplot as plt # 繪制柱狀圖 aggregated_data.plot(kind='bar', color='steelblue', edgecolor='black', width=0.8) # 設置圖表標題和坐標軸標簽 plt.title('店鋪銷售數(shù)量') plt.xlabel('店鋪名稱') plt.ylabel('銷售數(shù)量') # 顯示圖表 plt.show()
我們使用 plot
函數(shù)繪制柱狀圖,其中 kind
參數(shù)指定圖表類型為柱狀圖,color
參數(shù)指定柱子的顏色,edgecolor
參數(shù)指定柱子邊框的顏色,width
參數(shù)指定柱子的寬度。然后,使用 title
、xlabel
和 ylabel
函數(shù)設置圖表標題和坐標軸標簽。最后,使用 show
函數(shù)顯示圖表。
添加數(shù)據(jù)標簽
為了更清楚地展示每個店鋪的銷售數(shù)量,我們可以在柱子上添加數(shù)據(jù)標簽。以下是添加數(shù)據(jù)標簽的代碼:
# 添加數(shù)據(jù)標簽 for i, v in enumerate(aggregated_data): plt.text(i, v, str(v), ha='center', va='bottom') # 顯示圖表 plt.show()
我們使用 text
函數(shù)添加數(shù)據(jù)標簽,其中 i
和 v
分別表示柱子的索引和高度,ha
參數(shù)指定水平對齊方式為居中,va
參數(shù)指定垂直對齊方式為底部。最后,再次使用 show
函數(shù)顯示圖表。
設置刻度標簽
由于店鋪名稱較長,如果全部顯示會導致刻度標簽重疊,影響美觀和可讀性。因此,我們可以旋轉刻度標簽,并設置字體大小和字體樣式。以下是設置刻度標簽的代碼:
# 設置刻度標簽的字體大小和旋轉角度 plt.xticks(rotation=45, fontsize=10) # 顯示圖表 plt.show()
我們使用 xticks
函數(shù)設置刻度標簽,其中 rotation
參數(shù)指定旋轉角度為45度,fontsize
參數(shù)指定字體大小為10。
添加圖例
我們可以添加圖例,以便更好地解釋圖表中的信息。以下是添加圖例的代碼:
# 設置圖例 plt.legend(['銷售數(shù)量'], loc='upper right') # 顯示圖表 plt.show()
我們使用 legend
函數(shù)添加圖例,其中 loc
參數(shù)指定圖例位置為右上角,['銷售數(shù)量']
表示圖例中的文本。
去除邊框和添加網格線
為了讓圖表更加簡潔和美觀,我們可以去除上邊框和右邊框,并添加水平虛線網格線。以下是去除邊框和添加網格線的代碼
# 去除上邊框和右邊框 plt.gca().spines['top'].set_visible(False) plt.gca().spines['right'].set_visible(False) # 添加網格線 plt.grid(axis='y', linestyle='--', alpha=0.5) # 顯示圖表 plt.show()
我們使用 gca
函數(shù)獲取當前軸對象,然后使用 spines
屬性去除上邊框和右邊框。使用 grid
函數(shù)添加水平虛線網格線,其中 axis
參數(shù)指定網格線方向為垂直方向,linestyle
參數(shù)指定網格線樣式為虛線,alpha
參數(shù)指定網格線透明度為0.5。
設置背景色和調整布局
最后,我們可以設置圖表的背景色,并調整圖表布局使得圖表內容更加緊湊。以下是設置背景色和調整布局的代碼:
# 設置背景色 plt.gca().set_facecolor('#F5F5F5') # 調整圖表布局 plt.tight_layout() # 顯示圖表 plt.show()
我們使用 set_facecolor
函數(shù)設置背景色為淺灰色,使用 tight_layout
函數(shù)調整圖表布局。
完整代碼
將上面的代碼整合起來,得到完整的代碼如下:
import pandas as pd import matplotlib.pyplot as plt # 從Excel文件中讀取數(shù)據(jù) data = pd.read_excel('C:\\Users\Admin\\Desktop\\數(shù)據(jù)核對\\新建 XLSX 工作表.xlsx') # 聚合數(shù)據(jù) aggregated_data = data.groupby('店鋪名稱')['銷售數(shù)量'].sum() # 按銷售數(shù)量降序排列 aggregated_data = aggregated_data.sort_values(ascending=False) # 繪制柱狀圖 aggregated_data.plot(kind='bar', color='steelblue', edgecolor='black', width=0.8) # 添加數(shù)據(jù)標簽 for i, v in enumerate(aggregated_data): plt.text(i, v, str(v), ha='center', va='bottom') # 設置圖表標題和坐標軸標簽 plt.title('店鋪銷售數(shù)量') plt.xlabel('店鋪名稱') plt.ylabel('銷售數(shù)量') # 設置刻度標簽的字體大小和旋轉角度 plt.xticks(rotation=45, fontsize=10) # 設置圖例 plt.legend(['銷售數(shù)量'], loc='upper right') # 去除上邊框和右邊框 plt.gca().spines['top'].set_visible(False) plt.gca().spines['right'].set_visible(False) # 添加網格線 plt.grid(axis='y', linestyle='--', alpha=0.5) # 設置背景色 plt.gca().set_facecolor('#F5F5F5') # 調整圖表布局 plt.tight_layout() # 顯示圖表 plt.show()
到此這篇關于Python 利用pandas 和 matplotlib繪制柱狀圖的文章就介紹到這了,更多相關Python matplotlib繪制柱狀圖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
numpy和tensorflow中的各種乘法(點乘和矩陣乘)
這篇文章主要介紹了numpy和tensorflow中的各種乘法(點乘和矩陣乘),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03django通過ajax發(fā)起請求返回JSON格式數(shù)據(jù)的方法
這篇文章主要介紹了django通過ajax發(fā)起請求返回JSON格式數(shù)據(jù)的方法,較為詳細的分析了django處理ajax請求的技巧,需要的朋友可以參考下2015-06-06python執(zhí)行系統(tǒng)命令4種方法與比較
這篇文章主要介紹了python執(zhí)行系統(tǒng)命令4種方法與比較,需要的朋友可以參考下2021-04-04