R語言繪製條形圖

2021-02-20 表哥有話講

       

作者:吳健 中國科學院大學 R語言、統計學愛好者,尤其擅長R語言和Arcgis在生態領域的應用分享

個人公眾號:統計與程式語言 

條形圖可以通過垂直或水平的條形展示類別型變量的分布。熟悉R語言的用戶應該都可以熟練的繪製條形圖,但在實際應用中,我們常常會根據數據展示的需求對條形圖進行調整,這就需要我們花費大量時間了解條形圖繪製函數的一些參數及高級方法。基於此,本文整理出一些常用的條形圖繪製代碼,希望可以為大家帶來一些方便。

繪製基本條形圖

創建數據集

my_vector <- c(3, 12, 5, 18, 45)
names(my_vector) <- c(「A」, 「B」, 「C」, 「D」, 「E」)

繪製基本條形圖

barplot(my_vector, col=rgb(0.2, 0.4, 0.6, 0.6), xlab=」category」)

繪製水平條形圖

繪製水平條形圖

barplot(my_vector, col=rgb(0.2, 0.4, 0.6, 0.6), horiz=T, las=1)

繪製帶紋理的條形圖

繪製帶紋理的條形圖

barplot( c(2,5,4,6) , density=c(5,10,20,30) , angle=c(0,45,90,11) ,
   col=」brown」 , names.arg=c(「A」,」B」,」C」,」D」)  )

繪製堆砌和分組條形圖

創建數據集

set.seed(112)
data <- matrix(sample(1:30,15) , nrow=3)
colnames(data) <- c(「A」,」B」,」C」,」D」,」E」)
rownames(data) <- c(「var1」,」var2」,」var3」)

堆砌條形圖

barplot(data, col=colors()[c(23,89,12)] , border=」white」, space=0.04, font.axis=2, xlab=」group」, ylim=c(0,70))

分組條形圖

barplot(data, col=colors()[c(23,89,12)] , border=」white」, font.axis=2, beside=T, legend=rownames(data), xlab=」group」, font.lab=2)

繪製雙因素條形圖

定義顏色

colset <- c(「#B3E2CD」, 「#FDCDAC」, 「#CBD5E8」)

讀取數據

path <- 「http://www.sr.bham.ac.uk/~ajrs/R/datasets「
file <- paste(path, 「ao7_otac_by_radec.txt」, sep=」/「)
A <- read.fwf(file, widths=c(8, -3, 1, -3, 31, 18, 10, -2, 10, -3, 6, -4, 1, -4, 1, -9, 1))
colnames(A) <- c(「obsid」, 「cat」, 「PI」, 「target」, 「ra」, 「dec」, 「t.exp」, 「N」, 「pri」, 「fix」)
head(A)

在繪圖窗口繪製兩個布局

layout(matrix(1:2, 2, 1, byrow=TRUE), heights=c(1, 0.4))

繪製雙因素條形圖

par(las=1)
par(mar=c(5, 4, 4, 2.2) + 0.1)
plot(pri ~ cat, data=A, col=colset, main=」XMM AO7 accepted proposals」,
    xlab=」Science Category」, ylab=」Priority」)

在底部添加標籤

par(mar=c(0, 1, 0, 1))
plot.new()
legend(x=」topleft」, cex=0.7, c(「A: Stars, White Dwarfs and Solar System」,
「B: White Dwarf Binaries, Neutron Star Binaries, Cataclysmic Variables, ULXs and Black Holes」,
「C: Supernovae, Supernova Remnants, Diffuse (galactic) Emission and Isolated Neutron Stars」,
「D: Galaxies and Galactic Surveys」,」E: Active Galactic Nuclei, Quasars and BL-Lac Objects」,
「F: Groups of Galaxies, Clusters of Galaxies and Superclusters」,
「G: Cosmology, Extragalactic Deep Fields and Area Surveys」))

繪製附帶樣本觀測數的條形圖

生成數據

name <- c(「DD」,」with himself」,」with DC」,」with Silur」 ,」DC」,」with himself」,」with DD」,」with Silur」 ,」Silur」,」with himself」,」with DD」,」with DC」 )
average <- sample(seq(1,10) , 12 , replace=T)
number <- sample(seq(4,39) , 12 , replace=T)
data <- data.frame(name,average,number)
attach(data)

繪製基礎條形圖

my_bar <- barplot(average , border=F , names.arg=name , las=2 , col=c(rgb(0.3,0.1,0.4,0.6) , rgb(0.3,0.5,0.4,0.6) , rgb(0.3,0.9,0.4,0.6) ,  rgb(0.3,0.9,0.4,0.6)) , ylim=c(0,11) , main=」」 )
abline(v=c(4.9 , 9.7) , col=」grey」)

添加文本

text(my_bar, average+0.4 , paste(「n = 「,number,sep=」」) ,cex=1)

生成圖例

legend(「topleft」, legend = c(「Alone」,」with Himself」,」With other genotype」 ) ,
    col = c(rgb(0.3,0.1,0.4,0.6) , rgb(0.3,0.5,0.4,0.6) , rgb(0.3,0.9,0.4,0.6) ,  rgb(0.3,0.9,0.4,0.6)) ,
    bty = 「n」, pch=20 , pt.cex = 2, cex = 0.8, horiz = FALSE, inset = c(0.05, 0.05))
detach(data)


繪製李克特式條形圖

安裝加載包

install.packages(「likert」)
library(likert)

使用自定義數據集

data(pisaitems)
items28 <- pisaitems[, substr(names(pisaitems), 1, 5) == 「ST24Q」]
head(items28)
head(pisaitems)

繪製條形圖

l28 <- likert(items28)
summary(l28)
plot(l28)

繪製帶誤差棒的條形圖

加載數據包

library(ggplot2)

新建數據

data <- data.frame(
 name=letters[1:5],
 value=sample(seq(4,15),5),
 sd=c(1,0.2,3,2,4)
)

繪製條形圖

ggplot(data) +geom_bar( aes(x=name, y=value), stat=」identity」, fill=」skyblue」, alpha=0.7)+geom_errorbar( aes(x=name, ymin=value-sd, ymax=value+sd), width=0.4, colour=」orange」, alpha=0.9, size=1.3)

繪製存在負值的條形圖

加載程序包

library(ggplot2)

構建數據集,將正負值拆分成兩套數據

rr1 <- c(0, 0, 0, 0, 0, 10, 8.8, 6.2, 4.5, 4, 3.4)
rr2 <- c(-2.3, -1.8, -4, -5.7, -7.2, 0, 0, 0, 0, 0, 0)
dat <- data.frame(
   group = rep(c(「rr1」,」rr2」), each=11),
   x = rep(-5:5, 2),
   y = c(rr1, rr2)
)

繪製條形圖

ggplot(dat, aes(x=x, y=y)) +
   geom_bar(stat=」identity」, position=」identity」, width=0.25,aes(fill=group)) +
   scale_x_continuous(breaks=-5:5) +
   scale_y_continuous(breaks=seq(-10,10,2.5), limits=c(-10,10))

繪製棒棒糖狀條形圖(可強調重點)

#加載程序包

library(tidyverse)

#生成數據

set.seed(1000)

data <- data.frame(x=LETTERS[1:26], y=abs(rnorm(26)))

#排序數據

data <- data %>% arrange(y) %>% mutate(x=factor(x,x))

#繪圖

p <- ggplot(data, aes(x=x, y=y)) +

  geom_segment( aes(x=x, xend=x, y=0, yend=y ), color=ifelse(data$x %in% c("A","D"), "orange", "grey"), size=ifelse(data$x %in% c("A","D"), 1.3, 0.7) ) +

  geom_point( color=ifelse(data$x %in% c("A","D"), "orange", "grey"), size=ifelse(data$x %in% c("A","D"), 5, 2) ) +

  theme_light() +

  coord_flip() +

  theme(

    legend.position="none",

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

    panel.border = element_blank(),

    axis.ticks.y = element_blank()

  ) +

  xlab("") +

  ylab("Value of Y")

print(p) 

#添加註記

p + 

  annotate("text", x = grep("D", data$x), y = data$y[which(data$x=="D")]*1.2, label = "Group D is very impressive", color="orange", size=4 , angle=0, fontface="bold", hjust=0) + 

  annotate("text", x = grep("A", data$x), y = data$y[which(data$x=="A")]*1.2, label = paste("Group A is not too bad (val=",data$y[which(data$x=="A")] %>% round(2),")",sep="" ) , color="orange", size=4 , angle=0, fontface="bold", hjust=0) +

  ggtitle("How did groups A and D perform?")


公眾號後臺回復關鍵字即可學習

回復 R                  R語言快速入門及數據挖掘 
回復 Kaggle案例  Kaggle十大案例精講(連載中)
回復 文本挖掘      手把手教你做文本挖掘
回復 可視化          R語言可視化在商務場景中的應用 
回復 大數據         大數據系列免費視頻教程 
回復 量化投資      張丹教你如何用R語言量化投資 
回復 用戶畫像      京東大數據,揭秘用戶畫像
回復 數據挖掘     常用數據挖掘算法原理解釋與應用
回復 機器學習     人工智慧系列之機器學習與實踐
回復 爬蟲            R語言爬蟲實戰案例分享

相關焦點

  • R語言中繪製條形圖的函數:barplot
    條形圖(bar chart)是用寬度相同的條形的高度或長短來表示數據多少的圖形。它主要用來展示不同分類(橫軸)下某個數值型變量(縱軸)的取值。在實際中,條形圖主要有簡單條形圖,組合條形圖和堆疊條形圖。在R語言的基礎包中可以使用barplot()函數來繪製條形圖。
  • R語言繪圖(一):barplot()繪製條形圖
    條形圖:表示矩形條中的數據,條的長度與變量的值成比例。R語言中bartplot()函數可用於創建條形圖。
  • 用R語言繪製條形圖
    學「統計學」的人對R語言應該不會太陌生,近十年來,隨著大數據時代的到來,把統計學和數據分析,R語言都帶火了。
  • 使用Matplotlib繪製堆積條形圖
    我們為每個平臺和區域繪製一個條形圖,並查看結果。,那麼讓我們試試堆積條形圖並做一些調整。我們在繪製之前對值進行排序,這樣可以更好地理解順序,更容易比較條形圖。我們將在「Global Sales」列中這樣操作。
  • R語言從入門到精通:Day8-圖形繪製|r語言|直方圖|條形圖|圖例_網易...
    圖7:堆砌條形圖和分組條形圖  為了方便大家重複圖形繪製過程,上面圖形中展示的數據都是來自包vcd,大家在運行代碼前安裝vcd包即可。其中圖6中展示了簡單條形圖的繪製,圖7中展示了堆砌條形圖和分組條形圖的繪製。圖7中出現了圖例與圖形重疊的現象,大家可以回顧一下上一次推文中圖例設置的內容,調整圖例的大小和位置,就可以解決這個問題。(這個小問題就留給大家區解決了)  從上面這個問題可以看出,只有三個變量的情況下都不可避免的出現了圖例和圖形重疊的情況,更複雜的情況該怎麼辦?
  • 使用R語言繪製直方圖
    在本號前面的文章中介紹了R語言中繪製散點圖,折線圖,條形圖,餅圖和箱線圖的方法,有興趣的讀者關注本號後,可以往前看本號的所有文章,本文將介紹在R中繪製直方圖的方法。直方圖概述直方圖(Histogram)又稱柱狀圖,是由一系列高度不等的縱條紋或線段表示的數據分布情況。
  • 數據可視化系列:手把手教你繪製帶誤差線的條形圖
    條形圖可以用於展示數據不同分類下的均值、中位數、標準差和置信區間等,Excel可以實現
  • R語言學習第4天--barplot()繪製堆砌條形圖
    2、在命令行輸入「example(barplot)」,之後多次點擊「Enter」即可查看多個例圖及對應的腳本。從這裡我們應該看出來為什麼了解數據結構辣麼重要了吧(現在你可以翻過去看看「R語言學習第2天--R語言數據結構」)。
  • R語言筆記:用barplot()函數繪製酷炫的柱形圖
    R語言是一門統計語言。R既可以用來做數據的處理,又可以用來繪製各種各樣簡單的、複雜的可視化圖表。
  • 【R語言】--- ggplot2包的geom_bar()函數繪製柱狀圖
    柱狀圖又叫條形圖,是數據展示最重要的一類統計圖,數據分析結果展示中使用頻率非常高,各類統計軟體均能繪製。在R語言中,有很多包可繪製柱狀圖,比如graphics包barplot()函數和ggplot2包geom_bar()函數。本文介紹ggplot2包的geom_bar()函數繪製柱狀圖。
  • 使用R繪製幾種常用的雙坐標軸圖形
    難道R語言就無法繪製雙軸圖形了嗎?非也,R不僅是統計學家的標準工具,也是一款繪製圖形的理想工具。下面就跟大家介紹plotrix包中的twoord.plot()函數和twoord.stackplot()函數,它們可以實現雙坐標軸圖形的繪製。
  • Part1:怎麼採用SPSS繪製「條形圖」/「柱形圖」、誤差圖?
    一般直條橫置時稱為條形圖,縱置時稱為柱形圖或柱狀圖。在此都稱為條形圖。 一、把單個「分類變量」繪製成條形圖 案例1:描述「你參加體育活動的頻率」狀況。(數據:T001.sav) 問卷題目: B1你參加體育活動的頻率?
  • Python繪圖筆記:繪製四色散點圖和誤差條形圖
    1.散點圖一figure1#導入繪製散點圖所需要的包區間的隨機數 #x, y = rand(2, n)表示x,y都返回2行n列的位於(0,1)區間的隨機數 x, y = rand(2, n) #scale表示隨機點的大小,這裡進行了隨機生成 scale = 200.0 * rand(n) #繪製散點圖
  • 手把手教學,R語言基礎繪圖
    R語言是用於統計分析、繪圖的語言和操作環境。R的統計分析能力突出,有強大的數據展示能力。
  • python學習筆記:同時畫多圖,折線圖,箱線圖,條形圖,柱狀圖等
    (figure)figure()#使用subplot創建多個子圖,下面的subplot(2,3,1)表示創建一個包含2行3列圖表的圖紙,1表示第一張圖subplot(2,3,1)plot(x,y)#折線圖subplot(2,3,2)#縱向條形圖
  • R語言ggplot繪製峰巒圖繪製
    峰巒圖繪製清除當前環境中的變量rm(list=ls())設置工作目錄setwd("C:/Users/Dell/Desktop/R_Plots/19ridge/")使用ggridges包繪製峰巒圖3.1 1.5 0.2 setosa## 5 5.0 3.6 1.4 0.2 setosa## 6 5.4 3.9 1.7 0.4 setosa# 使用geom_density_ridgesh函數繪製峰巒圖
  • Python可視化很簡單,一文學會繪製柱狀圖、條形圖和直方圖
    、條形圖和直方圖相關的東東吧!用matplotlib庫的bar()函數繪製柱狀圖哦bar()函數的作用就是在圖表的x軸上繪製一個一定數據的分布圖哦,那bar()函數的語法格式是怎樣的呢?好啦,為了能夠更好的理解,咱們還是舉個「慄子」吧:上面方框中就是咱們所調用的bar()函數哦,下面咱們就運行一下看看效果吧:運行上面的指令輸出以下結果哦:好啦,上面就是用matplotlib庫的bar()函數生成柱狀圖的過程哦,下面咱們再看一下如何繪製條形圖吧
  • 每天學習一點R:16.barplot條形圖之整合點線圖
    (args.mges.number[1:8,]),fill = brewer.pal(8,"Set3"),bty = "n",ncol = 4,text.width = 0.21,cex = 2.5,text.font = 2)legend(0.01,0.55,legend = c("Total ARGs","16S rRNA gene"),pch = 19,col = c("red","black
  • 【R語言】--- graphics包的barplot()函數繪製柱狀圖
    柱狀圖又叫條形圖,是數據展示最重要的一類統計圖,數據分析結果展示中使用頻率非常高,各類統計軟體均能繪製。在R語言中,有很多包可繪製柱狀圖,比如graphics包barplot()函數和ggplot2包geom_bar()函數。 本文介紹graphics包的barplot()函數繪製柱狀圖。
  • 對稱條形圖和發散型條形圖篇
    前兩篇文章介紹了幾種常見的條形圖,實際上看起來簡單的條形圖可探索的設置還有很多!在體育賽事中,經常出現一種對稱條形圖,比如對比兩個熱門選手或者隊伍在各方面的打分情況等,這也是在普通橫向條形圖的基礎上繪製出來的,作為無所不能的python,當然也是可以繪製這種圖形的!閒話少敘,直接上代碼吧!