【ggplot2】- 設置坐標軸

2021-01-12 上帝的bug
基本箱線圖

library(ggplot2)


bp <- ggplot(PlantGrowth, aes(x=group, y=weight)) +

geom_boxplot()

bp

反轉 x軸 與 y軸
bp + coord_flip()

離散型數據的坐標軸

改變坐標軸中各項目的順序 > 特別注意, 離散數據的坐標軸中數據做為 factor 變量處理,他的位置取決於 level的順序

# 手動設置x軸的位置

bp + scale_x_discrete(limits=c("trt1","trt2","ctrl"))

# 逆轉順序

# 得到 factor 變量的 level

flevels <- levels(PlantGrowth$group)

flevels

## [1] "ctrl" "trt1" "trt2"

# 逆轉了 level 的順序

flevels <- rev(flevels)

flevels

## [1] "trt2" "trt1" "ctrl"

bp + scale_x_discrete(limits=flevels)

# 或者寫到一行裡面

bp + scale_x_discrete(limits = rev(levels(PlantGrowth$group)))

scale_x_discrete 可以設置離散型(discrete)數據, 中間的 x 表示處理x軸,如果是 fill 則可以修改填充顏色, color 修改邊框顏色, shape 修改形狀……

設置坐標軸的標籤

# 將原有的 "ctrl", "trt1", "trt2" 修改為 "Control", "Treat 1", "Treat 2"

bp + scale_x_discrete(breaks=c("ctrl", "trt1", "trt2"),

labels=c("Control", "Treat 1", "Treat 2"))

# 隱藏

bp + scale_x_discrete(breaks=NULL)

# 也可以這樣通過設置 theme 實現

bp + theme(axis.ticks = element_blank(), axis.text.x = element_blank())



連續型數據的坐標軸設置坐標軸的範圍和顛倒

# Make sure to include 0 in the y axis

bp + expand_limits(y=0) # y軸從0開始

# 設置y軸的範圍

bp + expand_limits(y=c(0,8))

我們可以通過expand_limits設置坐標軸的範圍, 但是如果 scale_y_continuous 被使用, 那麼就會覆蓋ylim的設置.

# 設置y軸的範圍

bp + ylim(0, 8)

# 同樣可以這樣

bp + scale_y_continuous(limits=c(0, 8))

# 如果同時設置 scale_y_continuous 和 ylim那麼ylim會被覆蓋,首先執行scale_y_continuous


bp + scale_y_continuous(limits=c(0, 8))+

ylim(0,10)

## Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

如果 y 的範圍使用上面的方法被截取, 那麼這個範圍以外的數據會被忽略,原始數據中的數據同樣會被忽略,比如設置了ylim(5,8),那麼小於5和大於8的原始數據同樣會被忽略,當然散點圖沒有問題,但是箱線圖會出錯.

為了避免這個問題可以使用coord_cartesian來設置範圍.

可以看下面的例子, 第一個出錯了, 第二個使用了coord_cartesian得到了正確的繪圖.

# These two do the same thing; all data points outside the graphing range are

# dropped, resulting in a misleading box plot

bp + ylim(5, 7.5)

## Warning: Removed 13 rows containing non-finite values (stat_boxplot).

# bp + scale_y_continuous(limits=c(5, 7.5))


# Using coord_cartesian "zooms" into the area

bp + coord_cartesian(ylim=c(5, 7.5))

# Specify tick marks directly

bp + coord_cartesian(ylim=c(5, 7.5)) +

scale_y_continuous(breaks=seq(0, 10, 0.25)) # Ticks from 0-10, every .25

 ### 點到坐標軸的方向

# Reverse order of a continuous-valued axis

bp + scale_y_reverse()

設置和隱藏坐標軸的刻度

# Setting the tick marks on an axis

# 顯示刻度從1到10,間隔為0.25

# The scale will show only the ones that are within range (3.50-6.25 in this case)


bp + scale_y_continuous(breaks=seq(1,10,1/4))

# 未設置刻度的地方會出現空白

bp + scale_y_continuous(breaks=c(4, 4.25, 4.5, 5, 6,8))


# 隱藏刻度

bp + scale_y_continuous(breaks=NULL)

# 隱藏刻度但是顯示標籤

bp + theme(axis.ticks = element_blank())

坐標軸的數據轉換(log, sqrt, etc.)

坐標軸可以進行線性變換,比如 log, power, roots 等等

這裡有兩種方式對數據進行轉換, 一種是比例轉換, 另一種是坐標轉換. 對於比例變換, 在坐標軸刻度和範圍被決定之前發生變換, 也就是先繪製圖形,在標明刻度; 對於坐標變換, 在坐標軸刻度和範圍被決定之後發生變換.也就是先標明刻度再繪製圖形.

具體的理解可以看下面的例子.

# 指數分布的數據

set.seed(201)

n <- 100

dat <- data.frame(

xval = (1:n+rnorm(n,sd=5))/20,

yval = 2*2^((1:n+rnorm(n,sd=5))/20)

)


# 散點圖

sp <- ggplot(dat, aes(xval, yval)) + geom_point()

sp

# log2 scaling of the y axis (with visually-equal spacing)

library(scales) # Need the scales package

##

## Attaching package: 'scales'

## The following objects are masked from 'package:readr':

##

## col_factor, col_numeric

# 比例變換 scale transformation

sp + scale_y_continuous(trans=log2_trans())

# 坐標變換

sp + coord_trans(y="log2")

# 設置刻度和標籤

sp + scale_y_continuous(trans = log2_trans(),

breaks = trans_breaks("log2", function(x) 2^x), # 這裡很有意思,可以著重看一下幫助文檔


labels = trans_format("log2", math_format(2^.x)))

這裡還有很多其他的變換, 可以 ?trans_new 查看幫助

set.seed(205)

n <- 100

dat10 <- data.frame(

xval = (1:n+rnorm(n,sd=5))/20,

yval = 10*10^((1:n+rnorm(n,sd=5))/20)

)


sp10 <- ggplot(dat10, aes(xval, yval)) + geom_point()


# log10

sp10 + scale_y_log10()

# 根據 log10 設置 刻度

sp10 + scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x),


labels = trans_format("log10", math_format(10^.x)))

Fixed ratio between x and y axes ### 修改 x 和 y 的比例

# Data where x ranges from 0-10, y ranges from 0-30

set.seed(202)

dat <- data.frame(

xval = runif(40,0,10),

yval = runif(40,0,30)

)

sp <- ggplot(dat, aes(xval, yval)) + geom_point()


# 設置為x:y = 1:1

sp + coord_fixed()

# x:y = 1:3

sp + coord_fixed(ratio=1/3)

坐標軸標籤的格式

設置和隱藏坐標標題

bp + theme(axis.title.x = element_blank()) + # Remove x-axis label


ylab("Weight (Kg)") # Set y-axis label

# 另一種方法

bp + scale_x_discrete(name="") +

scale_y_continuous(name="Weight (Kg)")

改變字體和旋轉 刻度標籤

element_text 可以設置文本的格式

# Change font options:

# X-axis label: bold, red, and 20 points

# X-axis tick marks: rotate 90 degrees CCW, move to the left a bit (using vjust,


# since the labels are rotated), and 16 points

bp + theme(axis.title.x = element_text(face="bold", colour="#990000", size=20),


axis.text.x = element_text(angle=90,# 設置旋轉的角度

vjust=0.5,# 設置縱向便宜距離 hjust為橫向偏移距離

size=16) # 字體的大小

)

刻度標籤的格式化

# Label formatters

library(scales) # Need the scales package

bp + scale_y_continuous(labels=percent) + # 顯示百分比

scale_x_discrete(labels=abbreviate) #沒有效果

對於連續型數據的格式化包括 comma, percent, dollar 和科學計數法 對於離散型數據的格式化, abbreviate(縮略詞) 將會去除元音和空格,對於日期可以使用 date_format

當然也可以創作自己的格式, 比如 HH:MM:SS 時間格式

# Self-defined formatting function for times.

timeHMS_formatter <- function(x) {

h <- floor(x/60)

m <- floor(x %% 60)

s <- round(60*(x %% 1)) # Round to nearest second

lab <- sprintf('%02d:%02d:%02d', h, m, s) # Format the strings as HH:MM:SS


lab <- gsub('^00:', '', lab) # Remove leading 00: if present


lab <- gsub('^0', '', lab) # Remove leading 0 if present


# 返回 lab

}


bp + scale_y_continuous(label=timeHMS_formatter)

 

隱藏參考線

# 隱藏所有參考線(minor, major)

bp + theme(panel.grid.minor=element_blank(),

panel.grid.major=element_blank())

# 隱藏 minor

bp + theme(panel.grid.minor=element_blank())

 

根據坐標軸的方向隱藏

# 隱藏 縱向

bp + theme(panel.grid.minor.x=element_blank(),

panel.grid.major.x=element_blank())

# 隱藏 橫向

bp + theme(panel.grid.minor.y=element_blank(),

panel.grid.major.y=element_blank())


相關焦點

  • 一文讀懂ggplot2數據可視化
    ggplot2將所繪製圖形的各部分獨立出來,如xy坐標,基本組件的顏色、圖標大小、填充類型、堆疊方式、坐標軸、地圖投影、數據分組、圖形分面等等信息劃歸為一些基本類型,每一部分分別用一段代碼表示。每段代碼內部有相應的參數控制,各代碼段再通過「+」運算符連接。這裡的「+」並非四則運算的加法,而是表示圖形各要素/組件之間的疊加。「+」運算符所連接的代碼片段,有任何一部分做出更改,整個圖形就做出相應調整。
  • Excel圖表縱坐標軸不等間距、對數坐標軸、截斷坐標軸怎樣設置
    縱坐標軸的刻度是均勻的,但「工資」數值差異很大,以致於後面幾個人的數據幾乎看不到。當數據差異更大時,圖表的效果會更差。這種情況下最好設置不等間距縱坐標軸。不等距縱坐標軸類型① 如果將上面的圖表修改成對數坐標軸,效果是不是更好一些呢?
  • Excel製作雙坐標軸圖表與把X軸與Y軸改為月份及使坐標軸帶方向
    在 Excel 中,既可以製作單坐標軸的圖表,又可以製作雙坐標軸的圖表;大多情況下,要製作雙 Y 軸,以實現每一條Y軸表示一個系列。圖表坐標軸標籤一般用數字,但也可以用文本或日期,例如把X軸或Y軸改為月份。如果要求坐標軸帶方向,可以給它們加上箭頭,X軸和Y軸都可以加箭頭。
  • Python可視化:matplotlib的坐標軸和rc參數設置指南!
    設置坐標軸 還記得上次畫的那條「項鍊」嘛?結尾的時候有說過,這些是新手村禮包,還有很多其他值得探索的地方呢,那麼就一起來康康還有哪些意想不到的操作吧(包括但不限於折線圖哦,很多操作再其他圖中也是可以運用噠!)
  • Python學習筆記:日期圖表的詳細設置,圖例和註解及坐標軸移動
    1.日期圖表的詳細設置#導入繪製日期相關圖表時所需要的模塊from pylab import *#導入matplotlib,並簡化,方便調用import matplotlib as mpl#使用datetime模塊,刻度格式器規定了值的顯示方式import datetime#生成圖紙,並設置圖紙的大小尺寸fig=figure(figsize=(10,6))#獲取當前坐標軸
  • 草圖大師怎麼調整坐標軸?su軟體調整坐標軸的方法
    上節小編和大家分享了su如何繪製坐標軸,你知道草圖大師怎麼調整坐標軸嗎?本文小編將和大家分享su軟體調整坐標軸的方法,感興趣的小夥伴們快和小編一起來看看SketchUp中如何調整坐標軸吧!su軟體調整坐標軸的方法如下:步驟一、草圖大師怎麼調整坐標軸?打開SketchUp軟體,以圖示為例示範調整坐標軸的方法。步驟二、在su軟體中將滑鼠移動到任意坐標軸上,單擊右鍵,點擊選擇「移動」。
  • 《數據可視化基礎》第二章:坐標軸
    位置標度決定了我們的數據在圖片中的位置,對於一個常規的2D圖形而言,我們需要兩個變量來定義一個點,這個也就是我們經常說到的X軸和Y軸。有了兩個位置標度之後,我們還需要制定這兩個標度的相對位置。常規來說X軸和Y軸是垂直的,但是也有其他的,比如說Y軸相對於X軸是銳角的。這種兩個位置標度再加上一個相對位置就構成了一個坐標軸。
  • R繪圖:一文了解ggplot2顏色的設置
    R繪圖往期回顧:ggplot2繪圖學習 兩個連續性變量ggplot2繪圖學習:單變量+繪圖背景R繪圖
  • 3dmax物體上的坐標軸不能移動的兩種有效解決方法
    3dmax軸不動怎麼辦?大家有遇到過移動時坐標軸不動的情況嘛,今天小編就為大家帶來了3dmax物體上的坐標軸不能移動的兩種有效解決方法。3dmax坐標軸沒有顯示,選擇移動物體時不能沿著X軸或Y軸移動,如下圖所示,下面跟著我一起來看看吧!
  • 10秒生成雙坐標軸圖表、瀑布圖!
    雙坐標軸圖表、瀑布圖經常使用,如果使用低版本製作非常麻煩,而對於Excel2016,那就是小菜一碟。滑鼠輕輕一點,就瞬間生成,怎一個爽字了得。1.根據2017年主要指標情況表,製作雙坐標軸。選擇區域,單擊插入推薦的圖表,第1個推薦的圖表就是雙坐標軸圖表,符合我們實際需求,確定。是不是超級爽?幾秒鐘就製作成了一份圖表,自己再進行簡單的美化即可。這種組合圖的原理是什麼呢?單擊所有圖表,組合,可以看到系列名稱、圖表類型、次坐標軸。
  • Excel雙坐標軸圖表,這才是同時展現2種數據的正確姿勢
    默認情況下圖表只有1根Y軸和1根X軸,雙軸圖表,是指有2根Y軸的圖表,要這種「奇葩」的圖表有何用?當圖表需要展示2種數據,如銷量和增長率數據時,一個為數值數據,另一個為百分比數據,當然不能在1根Y軸上共處了,這時就需要2根Y軸。下面來看一下案例效果。如下圖的兩張圖所示,分別是原始數據,和將數據做成雙軸圖表的效果。
  • 各象限內和坐標軸上的點和坐標的規律
    第一象限:(+,+)正正   第二象限:(-,+)負正   第三象限:(-,-)負負   第四象限:(+,-)正負   x軸正方向:(+,0)   x軸負方向:(-,0)   y軸正方向:(0,+)   y軸負方向:(0,-)
  • 見了五軸別慫,五軸轉臺的調試和旋轉中心的設置
    在常見的3軸加工中心裡,我們可以看到工件的移動,由於3軸裡沒有旋轉軸的加入,所以只有移動自由度。 在默認的情況下,我們用直角坐標系(也叫笛卡爾坐標系,Cartesian coordinate system )來描述他們的移動和旋轉。我們將移動的3個直線軸分別稱之為X軸、Y軸、Z軸,圍繞它們的3個旋轉軸稱之為A軸、B軸、C軸。
  • 研究陀螺角動量時,坐標系如何建立?為何選擇內環軸坐標系?
    上次小航和分析了陀螺轉子的轉動時的角動量的計算問題,我們所取的動坐標系是與剛體固連,剛體相對動坐標軸的位置不隨時間而改變,所以剛體對各動坐標軸的轉動慣量和慣量積均保持為常數。如果各動坐標軸又取得與剛體的慣性主軸重合,那麼剛體對各動坐標軸的慣量積都等於零。
  • 2018中考數學知識點:用坐標表示軸對稱
    下面是《2018中考數學知識點:用坐標表示軸對稱》,僅供參考!   用坐標表示軸對稱     坐標軸對稱     點P(x,y)關於x軸對稱的點的坐標是(x,-y)     點P(x,y)關於y軸對稱的點的坐標是(-x,y)     原點對稱     點P(x,y)關於原點對稱的點的坐標是(-x,-y)
  • 數據可視化系列:那些被你忽略的坐標軸設計細節
    坐標系是能夠使每個數組在維度空間內找到映射關係的定位系統,更偏向數學/物理概念。在數據可視化中,最常用的坐標西分為笛卡爾坐標系和極坐標系,本文介紹的坐標軸設計主要也是圍繞直角坐標系展開,enjoy~什麼是坐標軸在說坐標軸之前先來介紹下什麼是坐標系。
  • 柱狀圖不好看,那就換個坐標軸
    拿個例子來說(只是為了做出柱狀圖,沒有任何意義):library(ggplot2)ggplot(mpg[1:40,],aes(x = trans, y = hwy))+geom_bar(stat="identity",fill="red")把橫縱坐標調換位置,也就是翻轉坐標軸,這是一種線性坐標系
  • MATLAB畫雙x坐標的圖
    ax2 = axes('Position',get(ax1,'Position'),'XAxisLocation','top','XColor','k','YColor','k');其中,'Position'這個屬性設置坐標系2和坐標系1的原點位置一致;'XAxisLocation'設置坐標系2的x軸是在作圖的上方'top'還是下方'bottom',一般選擇上方,不然就和坐標系1的x軸重合了;同理'
  • 加工中心X軸和Y軸的對刀方法,實例講解
    實例:將一個大小為200X200X30工件裝夾刀立式加工中心的工作檯上,對刀要求以工件的O點作為原點,建立工件坐標系,設置相關參數。上圖顯示了工件在工具機上的位置,我們先把尋邊器靠在圖片所示的尋邊器1位上,記錄下當下的Y軸的機械坐標位置a,在G54坐標系中輸入的數值為a+5。