數據可視化 —— 柱形圖應用(大全)

一、案例一:單柱形圖

1.導入庫

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

2.給窗口名稱和畫布大小

plt.figure(num='單柱形圖', figsize=(6, 4), facecolor='w')

3.定義x、y軸的數據

# range(0-4)
x = np.arange(5)
# 創建數組
y1 = np.array([10, 8, 7, 11, 13])
y2 = np.array([9, 6, 5, 10, 12])

4.添加樣式

# 柱形圖的寬度
bar_width = 0.3
plt.title('5個月平均溫度柱形圖', fontsize=15)
plt.ylabel('溫度(度)', color='k', fontsize=12)

5.修改x標簽

plt.xticks(x, ['1月', '2月', '3月', '4月', '5月'], color='k', fontsize=12)

6.畫圖

plt.bar(x, y1, width=bar_width)

7.添加數據數值

# 頭標
for a, b in zip(x, y1):plt.text(a, b, '%d' % b, ha='center')

8.添加圖例

plt.legend(('5個月平均溫度', '各個月平均溫度', '測試'), shadow=True, fancybox=True)

9.顯示窗口

plt.show()

二、案例二:多柱形圖(學生成績)

# 導入用于繪圖的matplotlib.pyplot庫,在后續代碼中可以使用plt這個別名來調用該庫中的繪圖函數,
# 例如plt.figure()用于創建圖形窗口,plt.bar()用于繪制柱形圖等
import matplotlib.pyplot as plt# 導入用于科學計算的numpy庫,它提供了高效的多維數組對象和各種數學函數,
# 例如np.arange()用于生成等差數列,方便后續設置x軸刻度位置
import numpy as np# 創建一個新的圖形窗口,通過num參數設置窗口的標題為'多柱形圖',
# 方便用戶識別當前打開的圖形窗口對應的圖表內容;
# figsize參數用于設置圖形窗口的大小,這里設置寬為12英寸,高為7英寸,
# 可以根據實際需求調整圖形的大小;
# facecolor參數用于設置圖形窗口的背景顏色,'w'代表白色,使得圖形窗口背景為白色
plt.figure(num='多柱形圖', figsize=(12, 7), facecolor='w')# 由于matplotlib默認字體可能不支持中文顯示,通過設置plt.rcParams['font.sans-serif']為'KaiTi',
# 將matplotlib使用的字體修改為楷體,這樣在圖表中顯示中文標題、標簽等內容時就不會出現亂碼問題
plt.rcParams['font.sans-serif'] = 'KaiTi'# 使用numpy的arange函數生成一個從0到4的整數數組,
# 這個數組將用于表示x軸上的刻度位置,后續繪制柱形圖時會根據這些位置來確定柱子的橫坐標
x = np.arange(5)# 初始化一個空列表y,這個列表將用于存儲不同科目的成績數據,
# 每個元素是一個包含5個學生該科目成績的列表
y = []
# 向列表y中添加語文成績數據,列表中的每個元素對應一個學生的語文成績
y.append([100, 80, 70, 15, 77])
# 向列表y中添加數學成績數據,同樣每個元素對應一個學生的數學成績
y.append([91, 64, 50, 100, 55])
# 向列表y中添加英語成績數據,每個元素對應一個學生的英語成績
y.append([13, 14, 93, 95, 77])# 設置每個柱形圖的寬度為0.2,這個寬度值會影響柱子在圖表中的顯示寬度,
# 需要根據實際情況調整,避免柱子之間重疊或者間隔過大
bar_width = 0.2# 使用plt.title函數為圖表添加標題,標題內容為'學生成績柱形圖',
# fontsize參數設置標題的字體大小為20,使得標題更加醒目;
# color參數設置標題的顏色為黑色('k'代表黑色),增強標題的可讀性
plt.title('學生成績柱形圖', fontsize=20, color='k')
# 使用plt.xlabel函數為x軸添加標簽,標簽內容為'姓名',
# 表明x軸代表的是不同學生的姓名;
# fontsize參數設置標簽的字體大小為15,讓標簽清晰可見
plt.xlabel('姓名', fontsize=15)
# 使用plt.ylabel函數為y軸添加標簽,標簽內容為'成績(分)',
# 表明y軸代表的是學生的成績,單位是分;
# fontsize參數設置標簽的字體大小為15,方便用戶識別
plt.ylabel('成績(分)', fontsize=15)# 使用plt.ylim函數設置y軸的顯示范圍,從0到100分,
# 這樣可以確保圖表中只顯示0到100分這個區間內的成績,使圖表更加聚焦于有效數據
plt.ylim(0, 100)# 使用plt.xticks函數移動x軸刻度標簽的位置,
# x + bar_width將刻度標簽的位置向右移動bar_width的距離,
# 使得刻度標簽位于每個柱子組的中間位置;
# 同時設置x軸刻度標簽為學生的姓名,依次為'小紅'、'小明'、'小愛'、'小雪'、'小白',
# 方便用戶對應每個柱子代表的學生
plt.xticks(x + bar_width, ['小紅', '小明', '小愛', '小雪', '小白'])# 使用for循環遍歷不同科目的成績數據,len(y)表示成績數據列表y的長度,也就是科目的數量
for i in range(len(y)):# 使用plt.bar函數繪制每個科目的柱形圖,# x + i * bar_width表示每個柱子的x軸位置,根據i的值進行偏移,# 確保不同科目的柱子依次排列,不會重疊;# y[i]表示當前科目的成績數據,即每個學生在該科目上的成績;# width=bar_width設置柱子的寬度為之前定義的bar_widthplt.bar(x + i * bar_width, y[i], width=bar_width)# 為每個柱子添加數據標簽,使用zip函數將每個柱子的x軸位置和對應的成績組合成元組,# 方便后續在每個柱子頂部添加成績數值for a, b in zip(x + i * bar_width, y[i]):# 使用plt.text函數在每個柱子的頂部添加成績數值,# a表示標簽的x軸位置,b表示標簽的y軸位置,即柱子的頂部;# '%d' % b將成績數值轉換為整數格式的字符串作為標簽內容;# ha='center'設置標簽在柱子頂部居中顯示,使圖表更加美觀plt.text(a, b, '%d' % b, ha='center')# 使用plt.legend函數為圖表添加圖例,
# 圖例中的標簽分別為'語文成績'、'數學成績'、'英語成績',
# 對應不同顏色的柱子代表的科目;
# shadow=True為圖例添加陰影效果,增強圖例的立體感;
# fancybox=True讓圖例的邊框呈現圓角效果,使圖例更加美觀
plt.legend(['語文成績', '數學成績', '英語成績'], shadow=True, fancybox=True)# 使用plt.show函數顯示繪制好的圖表,將圖形窗口展示給用戶
plt.show()

三、案例三:3個分店的銷售額

import matplotlib.pyplot as plt
import pandas as pd
import numpy as npplt.figure(num='多柱形圖', figsize=(14, 8), facecolor='w')
plt.rcParams['font.sans-serif'] = 'KaiTi'# 使用pandas的read_excel函數讀取指定路徑的Excel文件,
# 這里文件名為'2022年某店鋪3個分店銷售額.xlsx',并將讀取的數據存儲在DataFrame對象df中
df = pd.read_excel('2022年某店鋪3個分店銷售額.xlsx')# 使用numpy的arange函數生成一個從0到指定長度的整數數組,
# 這里指定長度為DataFrame中'月份'列的元素數量,該數組將作為后續圖表x軸的刻度位置
x = np.arange(len(df['月份']))# 初始化一個空列表y,用于存儲不同分店的銷售額數據
y = []
# 將DataFrame中'第一分店'列的數據添加到列表y中,代表第一分店各月的銷售額
y.append(df['第一分店'])
# 將DataFrame中'第二分店'列的數據添加到列表y中,代表第二分店各月的銷售額
y.append(df['第二分店'])
# 將DataFrame中'第三分店'列的數據添加到列表y中,代表第三分店各月的銷售額
y.append(df['第三分店'])# 設置每個柱形圖的寬度為0.2,這個寬度會影響柱形圖在圖表中的顯示效果,
# 需要根據數據量和圖表大小進行調整,避免柱子之間過于擁擠或過于稀疏
bar_width = 0.2# 設置圖表的標題為'2022年某店鋪3個分店銷售額',并將標題字體大小設置為20,
# 使標題更加醒目,方便用戶快速了解圖表的主題
plt.title('2022年某店鋪3個分店銷售額', fontsize=20)# 設置圖表x軸的標簽為'月份',表明x軸代表的是不同的月份
plt.xlabel('月份')# 設置圖表y軸的標簽為'銷售額(萬元)',表明y軸代表的是各分店的銷售額,單位為萬元,
# 同時將標簽字體大小設置為15,使標簽更加清晰
plt.ylabel('銷售額(萬元)', fontsize=15)# 設置y軸的顯示范圍,從0到40,即只顯示銷售額在0到40萬元之間的數據,
# 這樣可以使圖表聚焦于這個范圍內的數據,避免顯示無關的數值
plt.ylim(0, 40)# 設置x軸的刻度標簽位置和內容,將刻度標簽的位置向右移動bar_width的距離,
# 使刻度標簽位于每組柱子的中間位置,刻度標簽內容為DataFrame中'月份'列的數據
plt.xticks(x + bar_width, df['月份'])# 使用for循環遍歷不同分店的銷售額數據,len(y)表示列表y的長度,即分店的數量
for i in range(len(y)):# 繪制每個分店的柱形圖,x + i * bar_width確定柱子的x軸位置,# 不同分店的柱子會依次排列,不會重疊;y[i]是該分店各月的銷售額數據;# width=bar_width設置柱子的寬度為之前定義的寬度plt.bar(x + i * bar_width, y[i], width=bar_width)# 為每個柱子添加數據標簽,使用zip函數將柱子的x軸位置和對應的銷售額組合成元組,# 方便后續在每個柱子頂部添加銷售額數值for a, b in zip(x + i * bar_width, y[i]):# 在每個柱子的頂部添加銷售額數值,a是標簽的x軸位置,b是標簽的y軸位置,# '%.2f' % b將銷售額數值格式化為保留兩位小數的字符串,ha='center'使標簽在柱子頂部居中顯示plt.text(a, b, '%.2f' % b, ha='center')# 繪制平均參考線,計算三個分店銷售額的平均值,
# 先分別計算每個分店銷售額的平均值,再將這三個平均值相加并除以3得到總的平均值
# linestyle='-'設置參考線的樣式為實線,color='r'設置參考線的顏色為紅色
plt.axhline(y=(sum(y[0]) / len(y[0]) + sum(y[1]) / len(y[1]) + sum(y[2]) / len(y[2])) / 3,linestyle='-',color='r')# 為圖表添加圖例,圖例中的標簽依次為'平均工資'(此處可能有誤,應為'平均銷售額')、
# '第一分店'、'第二分店'、'第三分店',shadow=True為圖例添加陰影效果,
# fancybox=True使圖例的邊框呈現圓角效果,增強圖例的美觀性
plt.legend(['平均工資', '第一分店', '第二分店', '第三分店'], shadow=True, fancybox=True)# 將繪制好的圖表保存為圖片文件,文件名為'2022年3個分店銷售額柱形圖',
# 保存的圖片格式會根據文件名的后綴自動確定,默認是PNG格式
plt.savefig('2022年3個分店銷售額柱形圖')# 顯示繪制好的圖表,將圖形窗口展示給用戶
plt.show()

四、案例四:各班級學生成績

import matplotlib.pyplot as plt
import pandas as pd
import numpy as npplt.figure(num='多柱形圖', figsize=(12, 6), facecolor='w')
plt.rcParams['font.sans-serif'] = 'KaiTi'df = pd.read_excel('全校高二年級各班男女生英語成績評估.xlsx')
x = np.arange(len(df['班級名稱']))y = df['平均成績(男生)']
y2 = df['平均成績(女生)']# 這里定義了誤差棒的高度,預留的功能
# error = [1000, 200, 150, 100, 100, 500, 1000, 880]bar_width = 0.3
plt.title('全校高二年級各班男女生英語成績評估', fontsize=20)plt.ylabel('平均成績', fontsize=15)plt.ylim(0, 120)
plt.xticks(x + 0.15, df['班級名稱'])# 使用 zip 函數將 x 軸位置、男生平均成績和女生平均成績組合成元組,
# 然后遍歷這些元組,為每個班級的男女生平均成績柱子添加數據標簽
for a, b, c in zip(x, df['平均成績(男生)'], df['平均成績(女生)']):plt.text(a, b / 2, '%.1f' % b, ha='center', va='center')plt.text(a + bar_width, c / 2, '%.1f' % c, ha='center', va='center')plt.bar(x, y, width=bar_width)
plt.bar(x + bar_width, y2, width=bar_width)
plt.legend(['平均成績(男生)', '平均成績(女生)'], shadow=True, fancybox=True)plt.savefig('全校高二年級各班男女生英語成績評估(柱形圖).png')plt.show()

五、案例五:不同產品各季度銷售額

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.style as ms# 設置主題風格
ms.use('seaborn-v0_8-colorblind')
plt.figure(num='多柱形圖', figsize=(12, 8), facecolor='w')
plt.rcParams['font.sans-serif'] = 'KaiTi'
plt.rcParams['axes.unicode_minus'] = Falsedf = pd.read_excel('不同產品各季度的銷售額.xlsx')
x = np.arange(len(df['季度']))
y = []
y.append(df['產品A'])
y.append(df['產品B'])
y.append(df['產品C'])# fontfamily:設置字體,fontstretch:斜體
plt.title('不同產品各季度的銷售額', fontsize=20, fontfamily='SimHei', fontstyle='italic')
plt.ylabel('銷售額(元)',fontsize=14,fontweight='book')
plt.ylim(0, 9000)
plt.xticks(x + 0.2, df['季度'],fontstyle='italic', rotation=-60)bar_width = 0.2for i in range(len(y)):# 畫柱形plt.bar(x + i * bar_width, y[i], width=bar_width)# 寫標簽for a, b in zip(x + i * bar_width, y[i]):plt.text(a, b + 200, '%d' % b, ha='center')plt.legend(['產品A', '產品B', '產品C', ], shadow=True, fancybox=True)
plt.show()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76283.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76283.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76283.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

apijson 快速上手

apijson是強大的工具,簡化了CRUD的操作,只要有數據庫表,就能自動生成RESTFUL接口。但初次上手也是摸索了很長時間,尤其是部署與使用上,這里嘗試以初學者角度來說下: 一、好處 1、對于簡單的應用&#xff…

V4L2雜談

V4L2的開發手冊 在做v4l2的開發的時候, 可以使用v4l2-ctl命令協助調試和軟件開發。關于linux多媒體開發可以參考鏈接:https://www.linuxtv.org/wiki/index.php/Main_Page關于v4l2的api接口開發可以參考:https://linuxtv.org/docs.php在linux…

(五)深入了解AVFoundation-播放:多音軌、字幕、倍速播放與橫豎屏切換

引言 在之前的博客中,我們已經實現了一個相對完整的播放器,具備了基本功能,如播放、暫停、播放進度顯示和拖拽快進等。這為我們提供了一個堅實的基礎。接下來,我們將進一步擴展播放器的功能,使其更具靈活性和實用性&a…

3ds Max 2016的版本怎么處理 按鍵輸入被主程序截斷 C#winform窗體接受不到英文輸入

3ds Max 2016的版本怎么處理 按鍵輸入被主程序截斷 C#winform窗體接受不到英文輸入 如果窗體失去焦點應該取消 全局監聽事件 解決方案:在窗體失去焦點時取消全局鍵盤鉤子 為了確保 WinForms 窗體失去焦點時不再攔截鍵盤事件(避免影響 3ds Max 或其他程…

華為手機或平板與電腦實現文件共享

1.手機或平板與電腦在同一個網絡 2.打開手機或平板端,設置---更多連接----快分享或華為分享打開此功能-----開啟共享至電腦 3.打開電腦,網絡中就可看到手機端分享的用戶名稱 4. 登陸就可訪問手機 5.常見問題 5.1 電腦未發現本機 5.2 修改了訪問密碼后再…

elemenPlus中,如何去掉el-input中 文本域 textarea自帶的邊框和角標

1、去掉角標 :deep(.el-textarea__inner) {resize: none !important; // 去除右下角圖標 }2、去除邊框&#xff0c;并自定義背景色 <el-inputref"textareaRef"v-model"tempContent":style"{--el-border-color: rgba(255,255,255,0.0),--el-input-…

xv6-labs-2024 lab2

lab-2 0. 前置 課程記錄 操作系統的隔離性&#xff0c;舉例說明就是&#xff0c;當我們的shell&#xff0c;或者qq掛掉了&#xff0c;我們不希望因為他&#xff0c;去影響其他的進程&#xff0c;所以在不同的應用程序之間&#xff0c;需要有隔離性&#xff0c;并且&#xff0…

MCU控制4G模組(標準AT命令),CatM的最大速率?

根據3GPP標準&#xff0c;Cat M1的上行峰值速率大約是1 Mbps&#xff0c;下行大約是1 Mbps。但實際速率會受到多種因素影響&#xff0c;比如網絡條件、信號強度、模塊配置等。 考慮使用AT命令時的開銷。每次發送數據都需要通過AT命令&#xff0c;比如ATQISEND&#xff0c;會引…

JavaScript(JS進階)

目錄 00閉包 01函數進階 02解構賦值 03通過forEach方法遍歷數組 04深入對象 05內置構造函數 06原型 00閉包 <!-- 閉包 --><html><body><script>// 定義&#xff1a;閉包內層函數&#xff08;匿名函數&#xff09;外層函數的變量&#xff08;s&…

6.1es新特性解構賦值

解構賦值是 ES6&#xff08;ECMAScript 2015&#xff09;引入的語法&#xff0c;通過模式匹配從數組或對象中提取值并賦值給變量。&#xff1a; 功能實現 數組解構&#xff1a;按位置匹配值&#xff0c;如 let [a, b] [1, 2]。對象解構&#xff1a;按屬性名匹配值&#xff0c;…

SpringBoot美容院管理系統設計與實現

基于SpringBoot的美容院管理系統免費源碼&#xff0c;幫助您快速搭建高效、智能的美容院管理平臺。該系統涵蓋了管理員、技師、前臺、普通用戶及會員五大功能模塊&#xff0c;以下是系統的核心功能與部署方式詳細介紹。 ?功能模塊 ?管理員功能 ?美容部位管理&#xff1a;支…

記一次某網絡安全比賽三階段webserver應急響應解題過程

0X01 任務說明 0X02 靶機介紹 Webserver&#xff08;Web服務器&#xff09;是一種軟件或硬件設備&#xff0c;用于接收、處理并響應來自客戶端&#xff08;如瀏覽器&#xff09;的HTTP請求&#xff0c;提供網頁、圖片、視頻等靜態或動態內容&#xff0c;是互聯網基礎設施的核心…

ChatGPT 4:引領 AI 創作新時代

文章目錄 前言一、ChatGPT 4 的技術革新二、AI 文案創作&#xff1a;精準生成與個性化定制三、AI 繪畫藝術&#xff1a;從文字到圖像的神奇轉化四、AI 視頻制作&#xff1a;自動化剪輯與創意實現五、知識庫與 ChatGPT 4 的深度融合六、全新的變革和機遇七、相關書籍推薦《ChatG…

HTTP請求-請求行

請求行&#xff08;方法&#xff0c;URL&#xff0c;版本號&#xff09; 方法&#xff1a; 描述了這次請求的目的。 常見方法&#xff1a; GET&#xff1a;從服務器拿一個東西過來&#xff08;讀操作&#xff09; POST&#xff1a;往服務器放一個東西去&#xff08;寫操作…

OSPF不規則區域和LSA

OSPF不規則區域 1.遠離骨干的非骨干區域 R1-R4四臺路由器能夠正常學習到彼此路由&#xff0c;但是R5不行&#xff0c;因為R5是非法ABR 解決方法&#xff1a; 1使用Tunnel隧道將AR4連接到骨干區域 &#xff08;1&#xff09; 使用隧道解決不規則區域的問題 a.可能造成選路不…

【VS Code】開發C++跳轉配置

C配置c_cpp_properties.json {"env": {"myIncludePath": ["${workspaceFolder}/src/include","${workspaceFolder}/src","${workspaceFolder}","/home/xxx/include/"],"myDefines": ["RELEASE&qu…

Spring AI應用:利用DeepSeek+嵌入模型+Milvus向量數據庫實現檢索增強生成--RAG應用(超詳細)

Spring AI應用&#xff1a;利用DeepSeek嵌入模型Milvus向量數據庫實現檢索增強生成–RAG應用&#xff08;超詳細&#xff09; 在當今數字化時代&#xff0c;人工智能&#xff08;AI&#xff09;技術的快速發展為各行業帶來了前所未有的機遇。其中&#xff0c;檢索增強生成&…

Spring 的 IoC 和 DI 詳解:從零開始理解與實踐

Spring 的 IoC和 DI 詳解&#xff1a;從零開始理解與實踐 一、IoC&#xff08;控制反轉&#xff09; 1、什么是 IoC&#xff1f; IoC 是一種設計思想&#xff0c;它的核心是將對象的創建和管理權從開發者手中轉移到外部容器&#xff08;如 Spring 容器&#xff09;。通過這種…

JVM基礎架構:內存模型×Class文件結構×核心原理剖析

&#x1f680;前言 “為什么你的Java程序總在半夜OOM崩潰&#xff1f;為什么某些代碼性能突然下降&#xff1f;一切問題的答案都在JVM里&#xff01; 作為Java開發者&#xff0c;如果你&#xff1a; 對OutOfMemoryError束手無策看不懂GC日志里的神秘數字好奇.class文件如何變…

.DS_Store文件泄露、.git目錄泄露、.svn目錄泄露漏洞利用工具

&#x1f409;工具介紹 一款圖形化的 .DS_Store文件泄露、.git目錄泄露、.svn目錄泄露漏洞利用工具。 &#x1f3af;使用 本工具使用Python3 PyQt5開發&#xff0c;在開始使用前&#xff0c;請確保已經安裝了相關模塊&#xff1a; pip3 install -r requirements.txt -i ht…