python:使用matplotlib庫繪制圖像(四)

作者是跟著http://t.csdnimg.cn/4fVW0學習的,matplotlib系列文章是http://t.csdnimg.cn/4fVW0的自己學習過程中整理的詳細說明版本,對小白更友好哦!

四、條形圖

1. 一個數據樣本的條形圖

  • 條形圖:常用于比較不同類別的數量或值,以及進行簡單的數據分析。
  • 直方圖:常用于分析數據的集中趨勢、離散程度以及異常值的存在。
區別頻數分布直方圖條形圖
橫軸上的數據連續的,是一個范圍孤立的,代表一個類別
長條形之間沒有空隙有空隙
頻數的表示一般用面積表示;當寬度相同時,用長度表示長條形的高度

?代碼詳解:

  1. n = 12?這行代碼定義了條形圖中的條形數量,這里設置為12。

  2. X = np.arange(n)?這行代碼使用NumPy的arange函數創建一個數組,包含從0到n-1的整數,這個數組將用于條形圖的x軸坐標。

  3. Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)?這行代碼計算第一個條形圖的高度。每個高度是通過一個隨機數乘以(1-X/float(n))得到的,這樣可以確保條形圖從左到右逐漸減小。np.random.uniform(0.5,1.0,n)生成一個包含n個隨機數的數組,每個數在0.5到1.0之間。

  4. Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)?這行代碼與上面類似,計算第二個條形圖的高度。

  5. bar(X, -Y2, facecolor='#ff9999', edgecolor='white')?這行代碼在同一個x軸坐標上繪制第二個條形圖,但是高度為負值,這樣兩個條形圖就會堆疊在一起。

  6. for x,y in zip(X,Y1):?這個循環遍歷XY1數組的元素,將Y1的值作為文本繪制在每個條形上方。

text(x, y+0.05, '%.2f' % y, ha='center', va= 'bottom')代碼詳解:

  • x, y+0.05:這兩個參數指定了文本在圖表中的位置。x是條形的x軸坐標,y+0.05表示在條形的頂部加上0.05的偏移量,這樣文本就會出現在條形的上方。偏移量確保文本不會與條形圖重疊。

  • '%0.2f' % y:這是一個格式化字符串,用于將y的值格式化為帶有兩位小數的浮點數。%0.2f中的%是一個占位符,0.2f指定了浮點數的格式:至少一位整數,最多兩位小數,小數點后不足兩位的部分用0填充。

  • ha='center':這個參數指定了文本的水平對齊方式。hahorizontalalignment的縮寫,'center'表示文本應該水平居中對齊,即文本的中心位于指定的x坐標上。

  • va='bottom':這個參數指定了文本的垂直對齊方式。vaverticalalignment的縮寫,'bottom'表示文本的底部與指定的y坐標對齊,即文本的底部位于指定的y坐標上。

from pylab import *n = 12
X = np.arange(n)
Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
bar(X, -Y2, facecolor='#ff9999', edgecolor='white')#xticks(X)
for x,y in zip(X,Y1):text(x, y+0.05, '%.2f' % y, ha='center', va= 'bottom')
for x, y in zip(X, -Y2):text(x, y-0.15, '%.2f'% y, ha='center', va='bottom')ylim(-1.25,+1.25)
show()

2. 多個數據樣本的條形圖

# 設置中文字體和負號正常顯示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = Falselabel_list = ['2014', '2015', '2016', '2017']  # 橫坐標刻度顯示值
num_list1 = [20, 30, 15, 35]  # 縱坐標值1
num_list2 = [15, 30, 40, 20]  # 縱坐標值2
x = range(len(num_list1))# 繪制條形圖
rects1 = plt.bar(x, height=num_list1, width=0.4, alpha=0.5, color='gold', label='部門一')
rects2 = plt.bar([i+0.4 for i in x], height=num_list2, width=0.4, color='lightcyan', label='部門二')# 設置y軸屬性
plt.ylim(0, 50)
plt.ylabel('數量')# 設置x軸屬性
plt.xticks([index+0.2 for index in x], label_list)
plt.xlabel("年份")
plt.title('某某公司')
plt.legend()# 顯示文本
for rect in rects1:height = rect.get_height()plt.text(rect.get_x() + rect.get_width() / 2, height + 1, str(height), ha='center', va='bottom')
for rect in rects2:height = rect.get_height()plt.text(rect.get_x() + rect.get_width() / 2, height + 1, str(height), ha='center', va='bottom')plt.show()

?

3. 水平條形圖

代碼詳解:

  1. price = [39.5, 39.9, 45.4, 38.9, 33.34]:這行代碼定義了一個列表price,包含了5個數值,分別代表了不同平臺的圖書價格。

  2. plt.barh(range(5), price, height=0.7, color='steelblue', alpha=0.5):這行代碼使用plt.barh()函數繪制了一個水平條形圖。range(5)生成了一個從0到4的整數序列,用于指定每個條形的位置。price列表中的值被用來填充條形的高度。

  3. plt.yticks(range(5), ['亞馬遜', '當當網', '中國圖書網', '京東', '天貓']):這行代碼設置了y軸的刻度標簽,與條形的位置對應,這里使用了中文標簽。

  4. for x, y in enumerate(price)::這行代碼開始了一個循環,enumerate(price)會生成一個包含索引和價格的元組序列,然后for循環會遍歷這個序列。

import matplotlib.pyplot as plt
import matplotlibmatplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = Falseprice = [39.5, 39.9, 45.4, 38.9, 33.34]# 繪制水平條形圖
plt.barh(range(5), price, height=0.7, color='steelblue', alpha=0.5)
plt.yticks(range(5), ['亞馬遜', '當當網', '中國圖書網', '京東', '天貓'])
plt.xlim(30, 47)
plt.xlabel('價格')
plt.title('不同平臺圖書價格')
for x, y in enumerate(price):plt.text(y+0.2, x-0.1, '%s'%y)plt.show()

4. 繪制不同數據樣本進行對比的水平條形圖

代碼詳解:

  1. y = range(1, len(num_list1)+1):這行代碼使用range()函數創建了一個整數序列,從1開始,到num_list1的長度加1結束。這個序列將用于確定條形圖的y軸位置

  2. y = [index*1.5 for index in y]:這行代碼通過列表推導式創建了一個新的列表y,每個元素都是原列表y中對應元素的1.5倍。這會將條形圖的y軸位置放大,以便于在同一個圖表中繪制兩個條形圖。

  3. plt.barh(y, num_list1, height=0.4, color='gold', alpha=0.5):這行代碼使用plt.barh()函數繪制了第一個條形圖y列表中的值被用來確定條形的位置,num_list1列表中的值被用來填充條形的高度。

  4. plt.barh([index-0.4 for index in y], num_list2, height=0.4, color='paleturquoise', alpha=0.5):這行代碼使用plt.barh()函數繪制了第二個條形圖。這里使用了列表推導式來創建一個新的y列表,每個元素是原列表y中對應元素的減去0.4,以便于在第一個條形圖的下方繪制第二個條形圖。

  5. plt.text(x+0.8, y1-0.1, str(x), ha='center', va='bottom'):這行代碼在每個條形旁邊添加了數量標簽。x+0.8確保了標簽不會被條形覆蓋,而y1-0.1確保了標簽不會被y軸的刻度覆蓋。

  6. for x, y2 in zip(num_list2, y)::這行代碼開始了一個新的循環,用于添加第二個條形圖的數量標簽。

  7. plt.text(x+0.8, y2-0.5, str(x), ha='center', va='bottom'):這行代碼在每個條形旁邊添加了第二個數量標簽。x+0.8確保了標簽不會被條形覆蓋,而y2-0.5確保了標簽不會被y軸的刻度覆蓋。

label_list = ['2014', '2015', '2016', '2017'] 
num_list1 = [20, 30, 15, 35]  
num_list2 = [15, 33, 40, 20]  
y = range(1, len(num_list1)+1)
y = [index*1.5 for index in y]plt.barh(y, num_list1, height=0.4, color='gold', alpha=0.5)
plt.barh([index-0.4 for index in y], num_list2, height=0.4, color='paleturquoise', alpha=0.5)
plt.yticks([index-0.2 for index in y], label_list)
plt.ylabel('年份')
plt.xlim(0, 45)
plt.xlabel('數量')for x, y1 in zip(num_list1, y):plt.text(x+0.8, y1-0.1, str(x), ha='center', va='bottom')
for x, y2 in zip(num_list2, y):plt.text(x+0.8, y2-0.5, str(x), ha='center', va='bottom')plt.show()

?

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

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

相關文章

3dmax-vray5大常用材質設置方法

3dmax云渲染平臺——渲染100 以高性價比著稱,是預算有限的小伙伴首選。 15分鐘0.2,60分鐘內0.8;注冊填邀請碼【7788】可領30元禮包和免費渲染券 提供了多種機器配置選擇(可以自行匹配環境)最高256G大內存機器,滿足不同用戶需求。 木紋材質 肌理調整&…

函數語意學(The Sematics of Function)

1、非靜態成員函數轉化為非成員函數 c 設計準則之一就是:非靜態成員函數至少和非成員函數有相同的效率。 也就是說下面兩個函數具有相同的效率: float magnitude(const Point3d * this){...}; float Point3d::magnitude(){...};以 float Point3d::mag…

練習9.5 彩票分析

練習 9.14:彩票 創建?個列表或元素,其中包含 10 個數和 5 個字 ?。從這個列表或元組中隨機選擇 4 個數或字?,并打印?條消息, 指出只要彩票上是這 4 個數或字?,就中?獎了。 練習 9.15:彩票分析 可以使…

面試題 05. 替換空格

05. 替換空格 題目描述示例 題解 題目描述 請實現一個函數,把字符串 s 中的每個空格替換成"%20"。 示例 示例1 輸入:s “We are happy.” 輸出:“We%20are%20happy.” 題解 class Solution { public:string replaceSpace(stri…

jQuery 元素選擇器集合

jQuery 提供了一套非常強大的元素選擇器,它們可以以各種方式定位和操作網頁文檔中的元素。 以下是 jQuery 中的一些常用選擇器: 1、基本選擇器 #id:選擇 ID 為 id 的元素。.(類選擇器):選擇具有特定類的…

2.5 OJ 網站的使用與作業全解

目錄 1 OJ 網站如何使用 1.1 注冊賬戶 1.2 登錄賬戶 1.3 做題步驟 2 本節課的 OJ 作業說明 3 章節綜合判斷題 4 課時2作業1 5 課時2作業2 6 課時2作業3 1 OJ 網站如何使用 〇J 是英文 Online Judge 的縮寫,中文翻譯過來是在線判題。當用戶將自己編寫的代碼…

基于XC7VX690T FPGA+ZU15EG SOC的6U VPX總線實時信號處理平臺(支持4路光纖)

6U VPX架構,符合VITA46規范板載高性能FPGA處理器:XC7VX690T-2FFG1927I板載1片高性能MPSOC:XCZU15EG-2FFVB1156I板載1片MCU,進行健康管理、時鐘配置等V7 FPGA外掛2個FMC接口兩片FPGA之間通過高速GTH進行互聯 基于6U VPX總線架構的通…

從零開始做題:神奇的棋盤

題目 打開得到一副adfgvx加密棋盤 觀察txt數據只有1-5,猜測是數字字母坐標轉換,用notepad批量操作一下 解題 AGAXXDAGGVGGVDVADAVXDGADVGDVAADDDDFXAFAFDGDVXXDGGDGGDXDDFDDXVGXADGVDFXVVAADDXDXXADDVGGGXGXXXXGXXGGXGDVVVGGGAGAAAAGAAGGAGDDDAGAGGG…

解釋如單例、工廠、觀察者等常見設計模式在Android開發中的應用。

在Android開發中,設計模式的應用是提升代碼質量、增強可維護性和可擴展性的重要手段。單例模式(Singleton)、工廠模式(Factory)、觀察者模式(Observer)等是其中最為常見且實用的設計模式。下面我…

如何對已經存在的表進行加分區方案分區函數

我參考網上的,寫了2給存儲過程,一個初始創建文分區方案分區函數;一個可以通過作業新增文件組文件件; 但是初始沒有綁定表,網上的都是在創建表是綁定分區方案,但是我的表是已經存在的,怎么綁定 …

Python實現網站IP地址查詢

使用socket庫實現網站的ip地址查詢,以便于使用CC攻擊和DDoS攻擊(鬧著玩的) import socket def get_website_ip(website): try: ip socket.gethostbyname(website) return ip except socket.gaierror: retur…

最小數字游戲(Lc2974)——模擬+優先隊列(小根堆)、排序+交換

你有一個下標從 0 開始、長度為 偶數 的整數數組 nums ,同時還有一個空數組 arr 。Alice 和 Bob 決定玩一個游戲,游戲中每一輪 Alice 和 Bob 都會各自執行一次操作。游戲規則如下: 每一輪,Alice 先從 nums 中移除一個 最小 元素&…

力扣 383贖金信

思路,用unordered_map存儲magazine中字符以及字符出現的次數 遍歷ransomNote中每個字符,如果能在map中找到,則對應value減一,如果字符對應的value小于零,意味著magazine中找不到與ransomNote里這個字符對應的字符&…

翁愷-C語言程序設計-05-3. 求a的連續和

05-3. 求a的連續和 輸入兩個整數a和n,a的范圍是[0,9],n的范圍是[1,8],求數列之和S aaaaaa…aaa…a(n個a)。如a為2、n為8時輸出的是222222…22222222的和。 輸入格式: 輸入在一行中給出兩個整數&#xf…

VUE_TypeError: Cannot convert a BigInt value to a number at Math.pow 解決方法

錯誤信息 TypeError: Cannot convert a BigInt value to a number at Math.pow vue 或 react package.json添加 "browserslist": {"production": ["chrome > 67","edge > 79","firefox > 68","opera >…

實戰演練-2021年電賽國一之三端口DC-DC變換器

文章目錄 前言一、題目二、題目分析1、題目要求解析2、題目方案選定方案一(使用buck-boost電路+雙向DC-DC電路(前端))方案二(使用同步整流Boost升壓電路+雙向DC-DC電路(前端))方案三(使用同步整流Boost升壓…

實時聊天 Vue + Vuex + sockjs-client + stompjs進行websocket連接

實時聊天 知識點WebSocket介紹SockJSSTOMP 開發環境功能實現安裝應用在vuex中創建vue中的引入、監聽、實例化與收發、訂閱消息引入組件實例化與訂閱計算屬性監聽收到消息封裝的發送消息的公共方法發送消息 完整的代碼 知識點 WebSocket介紹 WebSocket 是一種在 Web 應用中實現…

二叉搜索樹大冒險:尋找-插入-刪除

OK,看我們題目就可知道啦,今天要分享學習的一種數據結構就是二叉搜索樹。 內容題目也說了三個大概的,分別是尋找、插入、刪除。 講這個之前呢,那么就先講講這個二叉搜索樹是何方神圣呢? 二叉搜索樹: 又…

【學習筆記】無人機(UAV)在3GPP系統中的增強支持(五)-同時支持無人機和eMBB用戶數據傳輸的用例

引言 本文是3GPP TR 22.829 V17.1.0技術報告,專注于無人機(UAV)在3GPP系統中的增強支持。文章提出了多個無人機應用場景,分析了相應的能力要求,并建議了新的服務級別要求和關鍵性能指標(KPIs)。…

全網最詳細單細胞保姆級分析教程(二) --- 多樣本整合

上一節我們研究了如何對單樣本進行分析,這節我們就著重來研究一下如何對多樣本整合進行研究分析! 1. 導入相關包 library(Seurat) library(tidyverse) library(patchwork)2. 數據準備 # 導入單樣本文件 dir c(~/Desktop/diversity intergration/scRNA_26-0_filtered_featur…