R語言基礎| 基本圖形繪制(條形圖、堆積圖、分組圖、填充條形圖、均值條形圖)

目錄

一、前言

二、條形圖

1.?簡單的條形圖

2.堆積、分組和填充條形圖(柱狀圖)?

(1)堆積圖,對Improved進行堆積,注意position=“stack”

(2)分組圖,對Improved進行分組,注意position=“dodge”:

?(3)填充條形圖,對Improved進行填充,注意position=“fill”:

(4)關于position的設置可以分為以下4種:

3.均值條形圖

(2)計算不同地區的平均文盲率:

(3)作圖

(4)帶誤差線的條形圖

?4.條形圖的微調

(1)顏色

(2)條形圖的標簽

1)旋轉

2)修改坐標軸的字體字號和旋轉角度


一、前言

????????ggplot2 是一個基于 R 語言的數據可視化包,提供了一種結構化的方法來描述和構建圖表,因此被廣泛用于制作可視化圖表。其是tidyverse數據科學生態系統的一部分。

????????在 ggplot2 中,每一個圖形都是從數據映射到美學屬性(如顏色、形狀和大小)、加上幾何對象(如點、線和條形圖)、統計變換和坐標系等元素組合而成。這種分層和模塊化的方法使得用戶可以靈活地創建復雜的圖表,同時保持代碼的可讀性和易用性。通過ggplot2,你可以創建各種圖表:包括但不限于散點圖、線圖、直方圖、條形圖和箱線圖。此外,ggplot2 提供了廣泛的自定義選項,允許用戶調整幾乎圖表的每個細節,以適應具體的展示需求。

????????簡而言之,ggplot2 是 R 語言中一個功能強大且靈活的數據可視化工具。因此,本文主要學習如何在R語言中通過ggplot2來繪制條形圖、堆積圖、餅圖、直方圖、核密度圖、箱圖、小提琴圖。

二、條形圖

以 vcd 包中的Arthritis數據框為例:

install.packages("vcd")
library(vcd)
library(grid)
data_frame <- package_name::data_frame_name
Arthritis <- vcd::Arthritis
Arthritis

?輸出如下:

   ID Treatment    Sex Age Improved
1  57   Treated   Male  27     Some
2  46   Treated   Male  29     None
3  77   Treated   Male  30     None
4  17   Treated   Male  32   Marked
5  36   Treated   Male  46   Marked
6  23   Treated   Male  58   Marked
7  75   Treated   Male  59     None
8  39   Treated   Male  59   Marked
9  33   Treated   Male  63     None
10 55   Treated   Male  63     None
11 30   Treated   Male  64     None
12  5   Treated   Male  64     Some
13 63   Treated   Male  69     None
14 83   Treated   Male  70   Marked
15 66   Treated Female  23     None
16 40   Treated Female  32     None
17  6   Treated Female  37     Some
18  7   Treated Female  41     None
19 72   Treated Female  41   Marked
20 37   Treated Female  48     None
21 82   Treated Female  48   Marked
22 53   Treated Female  55   Marked
23 79   Treated Female  55   Marked
24 26   Treated Female  56   Marked
25 28   Treated Female  57   Marked
26 60   Treated Female  57   Marked
27 22   Treated Female  57   Marked
28 27   Treated Female  58     None
29  2   Treated Female  59   Marked
30 59   Treated Female  59   Marked
31 62   Treated Female  60   Marked
32 84   Treated Female  61   Marked
33 64   Treated Female  62     Some
34 34   Treated Female  62   Marked
35 58   Treated Female  66   Marked
36 13   Treated Female  67   Marked
37 61   Treated Female  68     Some
38 65   Treated Female  68   Marked
39 11   Treated Female  69     None
40 56   Treated Female  69     Some
41 43   Treated Female  70     Some
42  9   Placebo   Male  37     None
43 14   Placebo   Male  44     None
44 73   Placebo   Male  50     None
45 74   Placebo   Male  51     None
46 25   Placebo   Male  52     None
47 18   Placebo   Male  53     None
48 21   Placebo   Male  59     None
49 52   Placebo   Male  59     None
50 45   Placebo   Male  62     None
51 41   Placebo   Male  62     None
52  8   Placebo   Male  63   Marked
53 80   Placebo Female  23     None
54 12   Placebo Female  30     None
55 29   Placebo Female  30     None
56 50   Placebo Female  31     Some
57 38   Placebo Female  32     None
58 35   Placebo Female  33   Marked
59 51   Placebo Female  37     None
60 54   Placebo Female  44     None
61 76   Placebo Female  45     None
62 16   Placebo Female  46     None
63 69   Placebo Female  48     None
64 31   Placebo Female  49     None
65 20   Placebo Female  51     None
66 68   Placebo Female  53     None
67 81   Placebo Female  54     None
68  4   Placebo Female  54     None
69 78   Placebo Female  54   Marked
70 70   Placebo Female  55   Marked
71 49   Placebo Female  57     None
72 10   Placebo Female  57     Some
73 47   Placebo Female  58     Some
74 44   Placebo Female  59     Some
75 24   Placebo Female  59   Marked
76 48   Placebo Female  61     None
77 19   Placebo Female  63     Some
78  3   Placebo Female  64     None
79 67   Placebo Female  65   Marked
80 32   Placebo Female  66     None
81 42   Placebo Female  66     None
82 15   Placebo Female  66     Some
83 71   Placebo Female  68     Some
84  1   Placebo Female  74   Marked

1.?簡單的條形圖

在該數據框中,變量improved記錄了對每位接受了安慰劑或藥物的病人的治療效果:

table(Arthritis$Improved)

table()函數用于創建頻數表(頻率表)或列聯表,它可以統計向量中每個元素的出現次數。

對Improved變量作簡單的條形圖:

library(ggplot2)
ggplot(Arthritis,aes(x=Improved))+geom_bar()+labs(title = "Simple Bar chart",x="Improved",y="Frequency")

將上面的變量圖修改為橫著的,利用函數coord_flip()可以在繪制圖形時交換x軸和y軸的方向,從而實現圖形的翻轉(全稱coordinate Flip就是坐標翻轉的意思):

library(ggplot2)
ggplot(Arthritis,aes(x=Improved))+geom_bar()+labs(title = "Horizontal Bar chart",x="Improved",y="Frequency")+coord_flip()

2.堆積、分組和填充條形圖(柱狀圖)?

例子:比較分別接受了安慰劑(Placebo)或藥物(Treated)的病人的治療效果

(1)堆積圖,對Improved進行堆積,注意position=“stack”

library(ggplot2)
ggplot(Arthritis,aes(x=Treatment,fill=Improved))+geom_bar(position = "stack")+labs(title="Stacked Bar chart",x="Treament",y="Frequency")

(2)分組圖,對Improved進行分組,注意position=“dodge”:

library(ggplot2)
ggplot(Arthritis,aes(x=Treatment,fill=Improved))+geom_bar(position = "dodge")+labs(title="Grouped Bar chart",x="Treament",y="Frequency")

?(3)填充條形圖,對Improved進行填充,注意position=“fill”:

library(ggplot2)
ggplot(Arthritis,aes(x=Treatment,fill=Improved))+geom_bar(position = "fill")+labs(title="Filled Bar chart",x="Treament",y="Frequency")

(4)關于position的設置可以分為以下4種:

1)position=“stack”(默認值):將柱子堆疊在一起,形成堆疊柱狀圖。

2)position=“fill”:將每個柱子的高度歸一化為1,使得每個柱子的面積代表相對比例。這樣可以更好地比較不同類別之間的相對頻率或比例。

3)position=“dodge”:將柱子并排顯示,以顯示不同類別之間的直接比較。每個類別的柱子寬度保持不變。

4)position=“identity”(用的少):不對柱子進行任何位置調整,直接使用數據中的數值作為柱子的位置。這通常用于自定義柱狀圖的位置布局。

3.均值條形圖

(1)舉例

用R自帶數據集state.x77來繪制1970年美國各地區的平均文盲率,數據集state.region具有每個州所屬的地區名,看一下state.x77和state.region數據集:

head(state.x77)

state.region

?

(2)計算不同地區的平均文盲率:

states <- data.frame(state.region,state.x77)
library(dplyr)
plotdata <- states %>%group_by(state.region)%>%summarize(mean=mean(Illiteracy))
plotdata

?

(3)作圖

library(ggplot2)
ggplot(plotdata,aes(x=reorder(state.region,mean),y=mean))+geom_bar(stat = "identity")+labs(x="region",y="mean",title = "Mean Illiteracy Rate")

注意

1)reorder()函數用于對因子(factor)變量進行重新排序,以便根據另一個變量的值對其進行排序。它通常與aes()函數結合使用,用于設置繪圖的變量映射:

reorder(variable, by_variable, FUN = NULL)

variable:是要重新排序的因子變量。被排序者

by_variable是用于排序的參考變量,可以是任何數值型變量或表達式。按什么排序

FUN是一個可選的函數,用于對by_variable進行聚合。默認情況下,它不進行聚合,而是直接使用by_variable的值進行排序。

2)stat = “identity”表示不進行任何統計變換,直接使用原始數據進行繪圖。stat還可以設置為:

stat=“count”:默認選項,根據每個類別的頻數(計數)創建柱狀圖。這是geom_bar的默認統計變換,它會自動對數據進行計數,并使用計數值作為柱子的高度。

stat=“bin”:將連續變量進行離散化分組,并顯示每個分組的頻數。這通常用于創建直方圖,將連續變量分成多個離散的區間,并顯示每個區間中觀測值的頻數。

stat=“density”:根據密度估計函數,計算每個類別的密度曲線。這適用于連續變量的柱狀圖,其中柱子的高度表示密度而不是頻數。

stat=“summary”:根據指定的摘要函數,計算每個類別的摘要統計量,例如均值、中位數等。這對于創建帶有摘要統計信息的柱狀圖很有用。

stat=“bin2d”:用于創建二維直方圖,將兩個連續變量分成多個二維的離散區間,并顯示每個區間中觀測值的頻數。

(4)帶誤差線的條形圖

SEM=SD/sqrt(n),這里用n=n()來計算每組組內觀測值的數量:

states <- data.frame(state.region,state.x77)
library(dplyr)
plotdata1<- states %>%group_by(state.region)%>%summarize(n=n(),mean=mean(Illiteracy),SEM=sd(Illiteracy)/sqrt(n))
plotdata1

?

作圖(帶誤差線)用函數geom_errorbar(),并用ymin和ymax設置誤差線的上下限:

library(ggplot2)
ggplot(plotdata1,aes(x=reorder(state.region,mean),y=mean))+geom_bar(stat = "identity",fill="skyblue")+geom_errorbar(aes(ymin=mean-SEM,ymax=mean+SEM),width=0.2)+labs(x="region",y="mean",title = "Mean Illiteracy Rate",subtitle = "with standard error bars")

?4.條形圖的微調

(1)顏色

在geom_bar中,fill=“color“指定區域顏色,color=”color”指定邊框顏色。
前面對所有組添加的是同樣的顏色,也可以利用scale_fill_manual(values=c(“color1”,“color2”,“color3”,…))來手動設定不同組為不同的顏色,例如:

library(ggplot2)
ggplot(Arthritis,aes(x=Treatment,fill=Improved))+geom_bar(position = "stack",color="black")+scale_fill_manual(values = c("blue","red","skyblue"))

?

  labs(title="Stacked Bar chart",x="Treament",y="Frequency")

?

(2)條形圖的標簽

直接來看例子:

ggplot(mpg,aes(x=model))+geom_bar()+labs(title = "Car",y="Frequency",x="")

?

很顯然,x軸的標簽全部擠在一起,根本沒法看,可以選擇轉換橫縱坐標或者縮小x軸標簽的字號并對其旋轉一定角度。

1)旋轉
ggplot(mpg,aes(x=model))+geom_bar()+labs(title = "Car",y="Frequency",x="")+coord_flip()

?

2)修改坐標軸的字體字號和旋轉角度

ggplot(mpg,aes(x=model))+geom_bar()+labs(title = "Car",y="Frequency",x="")+theme(axis.text.x = element_text(angle = 45,hjust = 1,size = 8))

這里的theme()函數:

axis.text.x: 這指定我們正在自定義繪圖中的x軸文本。

element_text(): 這是用于自定義繪圖中文本元素(如軸標簽、標題和圖例)的函數。

angle = 45: 這個參數將x軸文本標簽的角度設定為45度。這意味著標簽將以順時針45度的角度旋轉。

hjust = 1: horizontal justification的縮寫,意為水平對齊方式。0:左對齊;0.5:居中對齊;1:右對齊。

size = 8: 這個參數將x軸文本標簽的大小設定為8點。它決定了標簽的字體大小。

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

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

相關文章

SegNet:一種用于圖像分割的深度卷積編碼器解碼器架構

教程/講解視頻點擊文末名片1、什么是語義分割&#xff0c;什么是FCN 我們提出了一種新穎且實用的深度全卷積神經網絡架構&#xff0c;用于語義像素級分割&#xff0c;命名為SegNet。 語義分割是指為圖像中的每個像素分配一個類別標簽&#xff08;如道路、天空、汽車&#xff09…

PyTorch 數據加載全攻略:從自定義數據集到模型訓練

目錄 一、為什么需要數據加載器&#xff1f; 二、自定義 Dataset 類 1. 核心方法解析 2. 代碼實現 三、快速上手&#xff1a;TensorDataset 1. 代碼示例 2. 適用場景 四、DataLoader&#xff1a;批量加載數據的利器 1. 核心參數說明 2. 代碼示例 五、實戰&#xff1…

Python--plist文件的讀取

Python練習&#xff1a;讀取Apple Plist文件 Plist文件簡介 ??定義??&#xff1a;Apple公司創建的基于XML結構的文件格式??特點??&#xff1a;采用XML語法組織數據&#xff0c;可存儲鍵值對、數組等結構化信息文件擴展名??&#xff1a;.plist應用場景: ??iOS系統:?…

JAVA幾個注解記錄

在Java中&#xff0c;Data、AllArgsConstructor和NoArgsConstructor是Lombok庫提供的注解&#xff0c;用于自動生成Java類中的樣板代碼&#xff08;如getter、setter、構造函數等&#xff09;&#xff0c;從而減少冗余代碼&#xff0c;提高開發效率。以下是它們的詳細功能和使用…

js對象簡介、內置對象

對象、內置對象 jarringslee 對象 對象&#xff08;object&#xff09;是js的一種引用數據類型&#xff0c;是一種無序的數據集合“ul”&#xff08;類比于數組&#xff0c;有序的數據集合“ol”&#xff09;。 基本上等于結構體。 對象的聲明 //基本方法 let 對象名 {聲…

【工程篇】07:如何打包conda環境并拷貝到另一臺服務器上

這是一份以名為 qwen2.5-vl 的 Conda 環境為例的詳細操作手冊&#xff0c;指導您如何將其打包并遷移至另一臺服務器。操作手冊&#xff1a;遷移 Conda 環境 qwen2.5-vl 至新服務器 本文檔將提供兩種有效的方法來遷移您的 qwen2.5-vl 環境。請根據您的具體需求和服務器條件選擇最…

rustdesk遠控電腦替代todesk,平替向日葵等軟件

rustdesk網頁端遠控電腦docker run --restart always \ --privileged \ -p 9000:9000 \ -p 21114:21114 \ -p 21115:21115 \ -p 21116:21116 \ -p 21116:21116/udp \ -p 21117:21117 \ -p 21118:21118 \ -p 21119:21119 \ -e KEYj8muHpzr2HK00zm9D94b1UFkaJ1bEiWsyA1qxb1nOA \ …

板凳-------Mysql cookbook學習 (十二--------1)

第9章 存儲例程&#xff0c;觸發器和計劃事件 326 9.0 概述 326 9.1 創建復合語句對象 329 mysql> -- 恢復默認分隔符 mysql> DELIMITER ; mysql>mysql> DROP FUNCTION IF EXISTS avg_mail_size; Query OK, 0 rows affected (0.02 sec)mysql> DELIMITER $$ mysq…

密碼學系列文(3)--分組密碼

一、分組密碼概述分組密碼是許多系統安全的一個重要組成部分&#xff0c;可用于構造&#xff1a;擬隨機數生成器流密碼消息認證碼(MAC)和雜湊函數消息認證技術、數據完整性機構、實體認證協議以及單鑰數字簽字體制的核心組成部分應用中對于分組密碼的要求&#xff1a;安全性運行…

WCDB soci 查詢語句

測試代碼 #pragma once #include <string> #include <vector>// Assume OperationLog is a struct representing a row in the table struct OperationLog {int id;std::string op_type;std::string op_subtype;std::string details;std::string timestamp; };clas…

lesson16:Python函數的認識

目錄 一、為什么需要函數&#xff1f; 1. 拒絕重復造輪子 2. 讓代碼像句子一樣可讀 3. 隔離變化&#xff0c;降低維護成本 二、函數的定義&#xff1a;編寫高質量函數的5個要素 基本語法框架 1. 函數命名的黃金法則&#xff08;PEP8規范&#xff09; 2. 不可或缺的文檔…

通過輪詢方式使用LoRa DTU有什么缺點?

在物聯網系統中&#xff0c;DTU&#xff08;Data Transfer Unit&#xff09;通常用于通過485或M-Bus等接口抄讀子設備的數據&#xff0c;并將這些數據傳輸到平臺側。然而&#xff0c;如果DTU采用輪詢方式與平臺通信&#xff0c;會帶來一系列問題&#xff0c;尤其是在功耗和系統…

Syntax Error: Error: PostCSS received undefined instead of CSS string

報錯&#xff1a;Syntax Error: Error: PostCSS received undefined instead of CSS string npm rebuild node-sass報錯&#xff1a;npm i canvas 報錯 canvas2.11.2 run install node-pre-gyp install --fallback-to-build --update-binary npm install canvas --canvas_binar…

人工智能之數學基礎:概率論和數理統計在機器學習的地位

概率和統計的概念概率統計是各類學科中唯一一門專門研究隨機現象的規律性的學科&#xff0c;隨機現象的廣泛性決定了這一學科的重要性。概率論是數學的分支&#xff0c;它研究的是如何定量描述隨機現象及其規律。我們之前經常在天氣軟件上看到&#xff1a;“今天下雨的概率是95…

第十四章 Stream API

JAVA語言引入了一個流式Stream API,這個API對集合數據進行操作&#xff0c;類似于使用SQL執行的數據庫查詢&#xff0c;同樣可以使用Stream API并行執行操作。Stream和Collection的區別Collection:靜態的內存數據結構&#xff0c;強調的是數據。Stream API:和集合相關的計算操作…

Oracle數據庫各版本間的技術迭代詳解

今天我想和大家聊聊一個我們可能每天都在用&#xff0c;但未必真正了解的技術——Oracle數據庫的版本。如果你是企業的IT工程師&#xff0c;可能經歷過“升級數據庫”的頭疼&#xff1b;如果你是業務負責人&#xff0c;可能疑惑過“為什么一定要換新版本”&#xff1b;甚至如果…

論文reading學習記錄3 - weekly - 模塊化視覺端到端ST-P3

文章目錄前言一、摘要與引言二、Related Word2.1 可解釋的端到端架構2.2 鳥瞰圖2.3 未來預測2.4 規劃三、方法3.1 感知bev特征積累3.1.1 空間融合&#xff08;幀的對齊&#xff09;3.1.2 時間融合3.2 預測&#xff1a;雙路徑未來建模3.3 規劃&#xff1a;先驗知識的整合與提煉4…

crawl4ai--bitcointalk爬蟲實戰項目

&#x1f4cc; 項目目標本項目旨在自動化抓取 Bitcointalk 論壇中指定板塊的帖子數據&#xff08;包括主貼和所有回復&#xff09;&#xff0c;并提取出結構化信息如標題、作者、發帖時間、用戶等級、活躍度、Merit 等&#xff0c;以便進一步分析或使用。本項目只供科研學習使用…

調用 System.gc() 的弊端及修復方式

弊端分析不可控的執行時機System.gc() 僅是 建議 JVM 執行垃圾回收&#xff0c;但 JVM 可自由忽略該請求&#xff08;尤其是高負載時&#xff09;。實際回收時機不確定&#xff0c;無法保證內存及時釋放。嚴重的性能問題Stop-The-World 停頓&#xff1a;觸發 Full GC 時會暫停所…

git merge 和 git rebase 的區別

主要靠一張圖&#xff1a;區別 git merge git checkout feature git merge master此時在feature上git會自動產生一個新的commit 修改的是當前分支 feature。 git rebase git checkout feature git rebase master&#xff08;在feature分支上執行&#xff0c;修改的是master分支…