ggplot2圖形解析

来源:http://www.cnblogs.com/jiangmiaomiao/archive/2017/09/02/7073001.html
-Advertisement-
Play Games

ggplot2是用於繪圖的R語言擴展包。圖形組件通過“+”符號, 以圖層(layer)的方式來完成圖形語法疊加,構成最終的繪圖, 每個圖層中的圖形組件可以分別設定數據、映射或其他相關參數, 因此組件之間具有相對獨立性的,可以單獨對圖層進行修改。 一、ggplot2基本語法 表示映射數據的標度。aes ...


ggplot2是用於繪圖的R語言擴展包。圖形組件通過“+”符號, 以圖層(layer)的方式來完成圖形語法疊加,構成最終的繪圖, 每個圖層中的圖形組件可以分別設定數據、映射或其他相關參數, 因此組件之間具有相對獨立性的,可以單獨對圖層進行修改。

一、ggplot2基本語法

 元素  描述
 Data(數據)   用於繪圖的數據,只能是數據框(data.frame)格式。
 Aesthetics(圖形屬性)

  表示映射數據的標度。aes參數控制了對哪些變數進行圖形映射,以及映射方式。

標度是一種函數,它控制了數學空間到圖形元素空間的映射。

 Geometries(幾何圖形)  表示數據的視覺元素
 Facet(分面)  用來描述數據如何被拆分為子集,並分別進行繪圖。
 Statics(統計)  幫助理解數據的表現方式。
 Coordinate(坐標)  圖形繪製的空間描述
 Theme(主題)

 控制著圖形中的非數據元素外觀,主要對標題、坐標軸標簽、圖例標簽等文字調整,

以及網格線、背景、軸須的顏色搭配

 

 

 

 

 

 

 

 

  

 

圖層結構:

二、ggplot2各圖層說明

1data(數據)

#  創建一個包含data和aes圖層的ggplot對象
dia_plot <- ggplot(dataset , aes(x =,  y =  )) 

2Aesthetics(圖形屬性)

aes()函數是ggplot2中的映射函數,是數據關聯到相應的圖形屬性的一種對應關係,將一個變數中離散或連續的數據與一個圖形屬性相互關聯。

分組(group)也是ggplot2的映射關係的一種,ggplot2預設所有觀測點分為一組。將觀測點按另外的離散變數進行分組處理, 可修改預設的分組設置。

aes() 中的圖形屬性如下:

:x:對應x軸的坐標位置

 y:對應y軸的坐標位置

 color:邊框顏色

 fill:填充色

size:點直徑或線條厚度

alpha:透明度

labels:圖形或者坐標的文字標簽

 shape:形狀

 示例:

# 創建數據集為mtcars,mpg映射 x ,0 映射y的散點圖。

p <- ggplot(mtcars, aes(x = mpg, y = wt, color = factor(gear)))
ggplot(mtcars, aes(x = mpg, y = 0)) +
geom_jitter()

3Geometries(幾何圖形)

Geo圖層控制著生成的圖形類型。例如用geom_point()生成散點圖,geom_line()生成折線圖。 aes層設置的映射關係是預設的, 在Geo圖層中沿用已設定的預設映射關係, 也可以在Geo圖層進行更改。可用的幾何圖形如下:

常用的圖形類型有:

scatter plots(散點圖):point、jitter、abline

Bar plots(柱形圖): histogram、bar、errorbar

line plots (線條圖): line、smooth

示例:

#散點圖, jitter使每個點在x軸的方向上產生隨機的偏移, 從而減少圖形重疊的問題

ggplot(mtcars, aes(x = cyl, y = wt)) +
geom_jitter(width = 0.1)

 #柱形圖

ggplot(mtcars, aes(mpg)) +
geom_histogram(binwidth = 1)

# 增加映射 ..density.. 到y屬性
ggplot(mtcars, aes(mpg)) +
geom_histogram(aes(y = ..density..), binwidth = 1)

# 線條圖
ggplot(dataset, aes(x = , y = )) +
geom_line() 

4、統計 
每一個幾何對象都有一個預設的統計變換, 並且每一個統計變換都有一個預設的幾何對象。以某種方式對數據信息進行彙總, 例如stat_smooth()添加平滑曲線。

 ggplot指令中,smooth(平滑曲線)按照每個子群分別計算,因為這裡存在一個隱匿的圖形屬性:group繼承了col。

示例:

#設置圖形屬性group =1表示繪製通過所有點的單個線性模型

ggplot(mtcars, aes(x = wt, y = mpg, col = cyl)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
geom_smooth(aes(group = 1), method = "lm", se = FALSE, linetype = 2)

 

ggplot(mtcars, aes(x = wt, y = mpg, col = factor(cyl))) +
geom_point() +
stat_smooth(method = "lm", se = F) +
stat_smooth(method = "loess", aes(group = 1), 
se = F, col = "black", span = 0.7)

5Coordinate(坐標)

用來控製圖形的尺寸。

標度(scale)控制著數據到圖形屬性的映射,將數據轉化為視覺上可以感知的東西, 如大小、顏色、位置和形狀。所以通過標度可以修改坐標軸和圖例的參數。

可使用 coord_fixed() 或coord_equal()設置圖形的長寬比,預設 aspect = 1。

 示例:

p <- ggplot(mtcars, aes(x = wt, y = hp, col = am)) + geom_point() + geom_smooth()

# Add scale_x_continuous
p + 
scale_x_continuous(limits = c(3, 6), expand = c(0, 0))

# Add coord_cartesion: the proper way to zoom in:
p +
coord_cartesian(xlim = c(3, 6))

# 使用函數改變y軸的界限。
ggplot(mtcars, aes(x = mpg, y = 0)) +
geom_jitter() +
scale_y_continuous(limits = c(-2,2))

coord_polar()函數將一個平面的x-y笛卡爾坐標轉換成極坐標,可用來製作餅圖。

wide.bar <- ggplot(mtcars, aes(x = 1, fill = cyl)) +
geom_bar(width = 1)

# Convert wide.bar to pie chart
wide.bar +
coord_polar(theta = "y")

6、分面(facet)

Facets是表現分類變數的一種方式。 先將數據劃分為多個子集, 然後將每個子集數據繪製到頁面,在同一個頁面上擺放多幅圖形

ggplot2提供了2種分面類型:網格型(facet_grid)和封裝型(facet_wrap)。網格型生成的是一個2維的面板網格, 面板的行與列通過變數來定義, 本質是2維的; 封裝型先生成一個1維的面板條塊, 然後再分裝到2維中, 本質是1維的。最直接的分面使用方法是 facet_grid()函數,只需要規定使用標點符號的行和列上使用的分類變數。

當一個分類變數具有多個等級(level),但並非所有level都存在於另一個變數的子集中,可以丟棄不用的level。

示例:設置scale = "free_y" 和 space = "free_y" 移除沒有數據的行。.

ggplot(mamsleep, aes(x = time, y = name, col = sleep)) +
geom_point() +
facet_grid(vore ~ ., scale = "free_y", space = "free_y")

7Theme(主題)

是跟數據無關的可視元素,數據可視化的最後一步,使圖形美觀。

按作用對象分成三種類型及對應的函數:

Rectangle(矩形區域):element_rect()

Line(線條):  element_text()

text (文字):element_line()

 在圖形頁面中的不同圖框之間存在空白,分面(facet)之間、x軸標簽和圖框之間,圖框與整個面板背景之間都存在著空白。示例如下:

# 增加分面之間的空白
library(grid)
z + theme(panel.spacing.x = unit(2, "cm"))

#移除多餘的圖形邊距空白
z + theme(panel.spacing.x = unit(2, "cm"),
plot.margin = unit(c(0,0,0,0), "cm"))

管理、更新和保存主題

 theme_update()  在原圖層主題設置上進行更新。

theme_set(old)  重新裝載圖層設置。

應用示例:

# Theme layer saved as an object, theme_pink

theme_pink <- theme(panel.background = element_blank(),

                    legend.key = element_blank(),

                    legend.background = element_blank(),

                    strip.background = element_blank(),

                    plot.background = element_rect(fill = myPink, color = "black", size = 3),

                    panel.grid = element_blank(),

                    axis.line = element_line(color = "black"),

                    axis.ticks = element_line(color = "black"),

                    strip.text = element_text(size = 16, color = myRed),

                    axis.title.y = element_text(color = myRed, hjust = 0, face = "italic"),

                    axis.title.x = element_text(color = myRed, hjust = 0, face = "italic"),

                    axis.text = element_text(color = "black"),

                    legend.position = "none")

# Apply theme_pink to z2

z2 + theme_pink

# Change code so that old theme is saved as old

old <- theme_update(panel.background = element_blank(),

             legend.key = element_blank(),

             legend.background = element_blank(),

             strip.background = element_blank(),

             plot.background = element_rect(fill = myPink, color = "black", size = 3),

             panel.grid = element_blank(),

             axis.line = element_line(color = "black"),

             axis.ticks = element_line(color = "black"),

             strip.text = element_text(size = 16, color = myRed),

             axis.title.y = element_text(color = myRed, hjust = 0, face = "italic"),

             axis.title.x = element_text(color = myRed, hjust = 0, face = "italic"),

             axis.text = element_text(color = "black"),

             legend.position = "none")

# Display the plot z2

z2

# Restore the old plot

theme_set(old) 

  •  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、如圖實現整數計算器 ComboBox控制項: Items屬性:添加集合中的項。 TextBox: 對TextBox的輸入文本有限制: 1)只能輸入數值型(整數和小數); 2)小數點不能開頭,小數只能輸入一位; 3)不滿足要求的輸入統一不接受。 實現方法 使用TextBox的KeyPress事件:在 ...
  • 轉自:http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html 基礎 - 常用控制項 C# WinForm開發系列 - CheckBox/Button/Label/ProgressBarWinForm下CheckedListBox的數據綁定 ...
  • 1、關於EF跟新資料庫更新指定欄位的設置 在EF提交到資料庫的時候或許某些欄位不想更新、或者自己更新一個模型到資料庫去! 1、更新數據不更新一些欄位 /// <summary> /// 資料庫指定更新欄位 /// </summary> [HttpGet] public HttpResponseMes ...
  • 關於C#委托和Lambda表達式 ...
  • 教學設計: 一、 課程基本情況 1.課程目標 1) 項目開發“通訊錄管理系統”;(分析和維護現有系統) 2)項目開發“農業大棚監控系統”;(自主完成同步項目(1)) 3) 項目開發“餐廳管理系統”;(專用周) WINDOWS基礎及應用技術 WINDOW及WPF標準控制項和組件 資料庫應用項目實踐 數據 ...
  • 回到目錄 在DotNetCore出來之後,同時也使用了quartz進行調度中心的設計,將它做到docker里方便部署,在之前的quartz版本里支持配置文件的方式,而現在不支持了,我們應該去想一下,為什麼不去支持配置文件?當然大叔也為配置文件設計了支持的方式,但我們還是應該想想作者為什麼不去支持配置 ...
  • 參照及推薦博客:伍華聰 http://www.cnblogs.com/wuhuacong/archive/2009/07/07/1518346.html http://www.cnblogs.com/wuhuacong/p/3560685.html 這篇文章介紹了作者軟體的開發及成長歷程,作者在十幾 ...
  • 從網上搜索一大堆,套路幾乎相同,但自己就是不行,怎麼也不行,為什麼不行呢?不行的話別人肯定不來坑博友了呀。然後放了一會,去拿下午茶回來,再次來看,恍然大悟,What?這麼簡單。 一開始代碼如下: helper.GetConnectionString(schoolStr);//獲取當前連接字元串 us ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...