第一章使用ggplot2進行數據可視化

第一章使用ggplot2進行數據可視化

library(tidyverse)

查看運行環境

devtools::session_info(c("tidyverse"))

- Session info ---------------------------------------------------------------

setting value

version R version 3.6.1 (2019-07-05)

os Windows 10 x64

system x86_64, mingw32

ui RTerm

language (EN)

collate Chinese (Simplified)_China.936

ctype Chinese (Simplified)_China.936

tz Asia/Taipei

date 2020-05-26

- Packages -------------------------------------------------------------------

package * version date lib source

askpass 1.1 2019-01-13 [1] CRAN (R 3.6.1)

assertthat 0.2.1 2019-03-21 [1] CRAN (R 3.6.1)

backports 1.1.5 2019-10-02 [1] CRAN (R 3.6.1)

base64enc 0.1-3 2015-07-28 [1] CRAN (R 3.6.0)

BH 1.72.0-3 2020-01-08 [1] CRAN (R 3.6.2)

broom 0.5.4 2020-01-27 [1] CRAN (R 3.6.2)

callr 3.4.1 2020-01-24 [2] CRAN (R 3.6.2)

cellranger 1.1.0 2016-07-27 [1] CRAN (R 3.6.2)

cli 2.0.1 2020-01-08 [1] CRAN (R 3.6.2)

clipr 0.7.0 2019-07-23 [2] CRAN (R 3.6.1)

colorspace 1.4-1 2019-03-18 [1] CRAN (R 3.6.1)

crayon 1.3.4 2017-09-16 [1] CRAN (R 3.6.1)

curl 4.3 2019-12-02 [1] CRAN (R 3.6.2)

DBI 1.1.0 2019-12-15 [2] CRAN (R 3.6.2)

dbplyr 1.4.2 2019-06-17 [1] CRAN (R 3.6.2)

digest 0.6.23 2019-11-23 [1] CRAN (R 3.6.2)

dplyr * 0.8.3 2019-07-04 [1] CRAN (R 3.6.1)

ellipsis 0.3.0 2019-09-20 [1] CRAN (R 3.6.1)

evaluate 0.14 2019-05-28 [1] CRAN (R 3.6.3)

fansi 0.4.1 2020-01-08 [1] CRAN (R 3.6.2)

farver 2.0.3 2020-01-16 [1] CRAN (R 3.6.2)

forcats * 0.4.0 2019-02-17 [1] CRAN (R 3.6.2)

fs 1.3.1 2019-05-06 [2] CRAN (R 3.6.1)

generics 0.0.2 2018-11-29 [2] CRAN (R 3.6.1)

ggplot2 * 3.2.1 2019-08-10 [1] CRAN (R 3.6.1)

glue 1.3.1 2019-03-12 [1] CRAN (R 3.6.1)

gtable 0.3.0 2019-03-25 [1] CRAN (R 3.6.1)

haven 2.2.0 2019-11-08 [1] CRAN (R 3.6.2)

highr 0.8 2019-03-20 [1] CRAN (R 3.6.3)

hms 0.5.3 2020-01-08 [1] CRAN (R 3.6.2)

htmltools 0.4.0 2019-10-04 [1] CRAN (R 3.6.1)

httr 1.4.1 2019-08-05 [1] CRAN (R 3.6.1)

jsonlite 1.6 2018-12-07 [1] CRAN (R 3.6.1)

knitr 1.28 2020-02-06 [1] CRAN (R 3.6.3)

labeling 0.3 2014-08-23 [1] CRAN (R 3.6.0)

lattice 0.20-38 2018-11-04 [2] CRAN (R 3.6.1)

lazyeval 0.2.2 2019-03-15 [1] CRAN (R 3.6.1)

lifecycle 0.1.0 2019-08-01 [1] CRAN (R 3.6.1)

lubridate 1.7.4 2018-04-11 [1] CRAN (R 3.6.2)

magrittr 1.5 2014-11-22 [1] CRAN (R 3.6.1)

markdown 1.1 2019-08-07 [1] CRAN (R 3.6.3)

MASS 7.3-51.4 2019-03-31 [2] CRAN (R 3.6.1)

Matrix 1.2-17 2019-03-22 [2] CRAN (R 3.6.1)

mgcv 1.8-31 2019-11-09 [2] CRAN (R 3.6.2)

mime 0.8 2019-12-19 [1] CRAN (R 3.6.2)

modelr 0.1.5 2019-08-08 [1] CRAN (R 3.6.2)

munsell 0.5.0 2018-06-12 [1] CRAN (R 3.6.1)

nlme 3.1-140 2019-05-12 [2] CRAN (R 3.6.1)

openssl 1.4.1 2019-07-18 [1] CRAN (R 3.6.1)

pillar 1.4.3 2019-12-20 [1] CRAN (R 3.6.2)

pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 3.6.1)

plogr 0.2.0 2018-03-25 [1] CRAN (R 3.6.1)

plyr 1.8.5 2019-12-10 [1] CRAN (R 3.6.2)

prettyunits 1.1.1 2020-01-24 [2] CRAN (R 3.6.2)

processx 3.4.1 2019-07-18 [2] CRAN (R 3.6.1)

progress 1.2.2 2019-05-16 [2] CRAN (R 3.6.1)

ps 1.3.0 2018-12-21 [2] CRAN (R 3.6.1)

purrr * 0.3.3 2019-10-18 [1] CRAN (R 3.6.2)

R6 2.4.1 2019-11-12 [1] CRAN (R 3.6.2)

RColorBrewer 1.1-2 2014-12-07 [1] CRAN (R 3.6.0)

Rcpp 1.0.2 2019-07-25 [1] CRAN (R 3.6.1)

readr * 1.3.1 2018-12-21 [1] CRAN (R 3.6.2)

readxl 1.3.1 2019-03-13 [1] CRAN (R 3.6.2)

rematch 1.0.1 2016-04-21 [1] CRAN (R 3.6.2)

reprex 0.3.0 2019-05-16 [1] CRAN (R 3.6.2)

reshape2 1.4.3 2017-12-11 [1] CRAN (R 3.6.1)

rlang 0.4.5 2020-03-01 [1] CRAN (R 3.6.3)

rmarkdown 2.1 2020-01-20 [1] CRAN (R 3.6.1)

rstudioapi 0.11 2020-02-07 [1] CRAN (R 3.6.3)

rvest 0.3.5 2019-11-08 [1] CRAN (R 3.6.2)

scales 1.1.0 2019-11-18 [1] CRAN (R 3.6.2)

selectr 0.4-2 2019-11-20 [1] CRAN (R 3.6.2)

stringi 1.4.3 2019-03-12 [1] CRAN (R 3.6.0)

stringr * 1.4.0 2019-02-10 [1] CRAN (R 3.6.1)

sys 3.3 2019-08-21 [1] CRAN (R 3.6.1)

tibble * 2.1.3 2019-06-06 [1] CRAN (R 3.6.1)

tidyr * 1.0.0 2019-09-11 [1] CRAN (R 3.6.1)

tidyselect 1.0.0 2020-01-27 [1] CRAN (R 3.6.3)

tidyverse * 1.3.0 2019-11-21 [1] CRAN (R 3.6.2)

tinytex 0.19 2020-01-14 [1] CRAN (R 3.6.2)

utf8 1.1.4 2018-05-24 [1] CRAN (R 3.6.1)

vctrs 0.2.99.9002 2020-01-13 [1] Github (r-lib/vctrs@038b6af)

viridisLite 0.3.0 2018-02-01 [1] CRAN (R 3.6.1)

whisker 0.4 2019-08-28 [2] CRAN (R 3.6.1)

withr 2.1.2 2018-03-15 [1] CRAN (R 3.6.1)

xfun 0.12 2020-01-13 [1] CRAN (R 3.6.3)

xml2 1.2.2 2019-08-09 [2] CRAN (R 3.6.1)

yaml 2.2.0 2018-07-25 [1] CRAN (R 3.6.0)

[1] C:/Users/wlx/Documents/R/win-library/3.6

[2] C:/Program Files/R/R-3.6.1/library

ggplot2::mpg libray之后就不用這樣了

1.mpg數據框

數據框是變量(列)和觀測(行)的矩形集合。mpg是ggplot2的內置數據框。

拿到一個數據首先就要觀察它!忘了誰說的反正好有道理。

Fuel economy data from 1999 and 2008 for 38 popular models of car

234 行x 11列

1.manufacturer:生產商 15個

2.model:型號 38個

3.displ:引擎排量-L 35個,單位為升,小數

4.year:出廠年份

5.cly:汽缸數 4,5,6,8

6.trans:變速方式:10個

7.dry:驅動方式 f r 4

8.cty :每加侖汽油能跑的公里數(城市)21個,整數

9.hwy:燃油效率:每加侖汽油能跑的公里數(高速路)單位英里/加侖,燃油效率高說明省油。 27個,整數。

10.fl:燃油類型,五個 p r e d c

11.class:車型 七個 compact midsize suv 2seater minivan pickup subcompact

library(ggplot2) ggplot包含在tidyverse中,不用再單獨library

mpg

# A tibble: 234 x 11

manufacturer model displ year cyl trans drv cty hwy fl class

<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>

1 audi a4 1.8 1999 4 auto(l~ f 18 29 p comp~

2 audi a4 1.8 1999 4 manual~ f 21 29 p comp~

3 audi a4 2 2008 4 manual~ f 20 31 p comp~

4 audi a4 2 2008 4 auto(a~ f 21 30 p comp~

5 audi a4 2.8 1999 6 auto(l~ f 16 26 p comp~

6 audi a4 2.8 1999 6 manual~ f 18 26 p comp~

7 audi a4 3.1 2008 6 auto(a~ f 18 27 p comp~

8 audi a4 quat~ 1.8 1999 4 manual~ 4 18 26 p comp~

9 audi a4 quat~ 1.8 1999 4 auto(l~ 4 16 25 p comp~

10 audi a4 quat~ 2 2008 4 manual~ 4 20 28 p comp~

# ... with 224 more rows

?mpg #查看幫助文檔

用dplyr包的distinct函數

p<-mpg
library(dplyr)
distinct(p,manufacturer) #manufacturer替換為其他列名。僅顯示非重復值,不顯示重復次數。

# A tibble: 15 x 1

manufacturer

<chr>

1 audi

2 chevrolet

3 dodge

4 ford

5 honda

6 hyundai

7 jeep

8 land rover

9 lincoln

10 mercury

11 nissan

12 pontiac

13 subaru

14 toyota

15 volkswagen

count(p,manufacturer) #顯示出現次數

# A tibble: 15 x 2

manufacturer n

<chr> <int>

1 audi 18

2 chevrolet 19

3 dodge 37

4 ford 25

5 honda 9

6 hyundai 14

7 jeep 8

8 land rover 4

9 lincoln 3

10 mercury 4

11 nissan 13

12 pontiac 5

13 subaru 14

14 toyota 34

15 volkswagen 27

count(p,class) #顯示出現次數

# A tibble: 7 x 2

class n

<chr> <int>

1 2seater 5

2 compact 47

3 midsize 41

4 minivan 11

5 pickup 33

6 subcompact 35

7 suv 62

count(p,drv)

# A tibble: 3 x 2

drv n

<chr> <int>

1 4 103

2 f 106

3 r 25

count(p,cyl)

# A tibble: 4 x 2

cyl n

<int> <int>

1 4 81

2 5 4

3 6 79

4 8 70

基礎作圖

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))


image.png

加顏色

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = class))

image.png

大小

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, size = class))


image.png

透明度和形狀

將車型class映射給透明度

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, alpha = class))

image.png

將車型class映射給形狀

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, shape = class))

image.png

(4)手動設置圖形屬性

例:所有點設為藍色

(注意:color="blue"在aes()外)

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy), color = "blue")


image.png

(5)stroke-輪廓(筆者補充)

適用于散點圖,21-24號形狀

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, stroke = 3),shape=21)

image.png

5.分面

(1)依據單個變量分面 facet_wrap() #分子圖

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_wrap(~ class, nrow = 2) #分兩行展示

image.png

nrow指定分面后顯示幾行

ncol指定分面后顯示幾列

注意~分面依據必須是離散型變量。

(2)依據兩個變量分面 facet_grid()

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(drv ~ cyl)

image.png

不需要指定nrow和ncol。

(3)不想在行或列維度中分面,用.代替變量名

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(. ~ cyl)


image.png

6.幾何對象

也就是圖的不同類型,如點圖、折線圖、直方圖等。

(1)理解分組

將一個圖形屬性映射為一個離散型變量,ggplot2就會自動對數據進行分組來繪制多個幾何對象。這種形式是隱式分組,不需要添加圖例和區分特征。

ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy))


image.png

將線性映射為drv(驅動方式,d,f,4)就會自動變成三條線型不同的線。

將顏色映射為drv,就會自動變成三條顏色不用的線。

分組

ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy, group = drv))


image.png

隱式分組-線型

ggplot(data = mpg) +
geom_smooth(
mapping = aes(x = displ, y = hwy, linetype = drv),
)

image.png

隱式分組-顏色

ggplot(data = mpg) +
geom_smooth(
mapping = aes(x = displ, y = hwy, color = drv),
show.legend = FALSE #不顯示圖例
)

image.png

(2)同一張圖顯示多個幾何對象--局部映射和全局映射

--這里涉及到圖層啦。

局部映射-映射只對改圖層有效

有多個幾何對象時,映射語句要重復多次,又丑又麻煩。

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
geom_smooth(mapping = aes(x = displ, y = hwy))


image.png

全局映射--對所有圖層生效

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point() +
geom_smooth()

image.png

局部映射與全局映射沖突時,服從局部映射。

例如:

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(mapping = aes(color = class)) +
geom_smooth(data = filter(mpg, class == "subcompact"), se = FALSE)

image.png

如果出現報錯,請library(dplyr) 或library(tidyverse)

Error in class == "subcompact" : comparison (1) is possible only for atomic and list types

這個報錯是因為filter函數出自dplyr包,不加載就不能用~

ps:關于se=FALSE

se是standard error的縮寫,se參數為擬合曲線添加標準誤差帶,也就是那個灰不啦嘰的灰色背景帶,默認是TRUE。

7.統計變換

(1)關于diamonds數據集 (筆者補充)

ggplot2內置數據集,包含53940顆鉆石的信息。

carat:克拉

cut:切割質量

color:顏色等級

clarity:純凈度等級

depth:深度比例

table:鉆石頂部相對于最寬點的寬度

price:價格

"x" "y" "z" :長寬深

↑以上來自幫助文檔?diamonds

(2)統計變換函數和幾何對象函數

統計變換:繪圖時用來計算新數據的算法叫做統計變換stat

geom_bar做出的圖縱坐標為count,是計算的新數據。

geom_bar的默認統計變換是stat_count,stat_count會計算出兩個新變量-count(計數)和prop(proportions,比例)。

每個幾何對象函數都有一個默認的統計變換,每個統計變換函數都又一個默認的幾何對象。

用幾何對象函數geom_bar作直方圖,默認統計變換是stat_count,

diamonds

# A tibble: 53,940 x 10

carat cut color clarity depth table price x y z

<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>

1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43

2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31

3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31

4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63

5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75

6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48

7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47

8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53

9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49

10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39

# ... with 53,930 more rows

count(diamonds,cut) #顯示出現次數

# A tibble: 5 x 2

cut n

<ord> <int>

1 Fair 1610

2 Good 4906

3 Very Good 12082

4 Premium 13791

5 Ideal 21551

ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut))


image.png

用統計變換函數stat_count做計數統計圖,默認幾何對象是直方圖。

ggplot(data [圖片上傳中...(image.png-18999c-1590543012090-0)]
= diamonds) +
stat_count(mapping = aes(x = cut))


image.png

這兩個代碼做出的圖片結果是一致的。兩種方法沒有優劣之分。

(3)顯示使用某種統計變換的原因

覆蓋默認的統計變換

直方圖默認的統計變換是stat_count,也就是統計計數。當需要直接用原表格的數據作圖時就會需要覆蓋默認的。

demo <- tribble(
~cut, ~freq,
"Fair", 1610,
"Good", 4906,
"Very Good", 12082,
"Premium", 13791,
"Ideal", 21551
) #新建表格并賦值給demo

ggplot(data = demo) +
geom_bar(mapping = aes(x = cut, y = freq), stat = "identity") #覆蓋默認的統計變換,使用identity。

image.png

覆蓋從統計變換生成變量到圖形屬性的默認映射

直方圖默認的y軸是x軸的計數。此例子中x軸是是五種cut(切割質量),直方圖自動統計了這五種質量的鉆石的統計計數,當你不想使用計數,而是想顯示各質量等級所占比例的時候就需要用到prop。

ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))

image.png

這里group=1的意思是把所有鉆石作為一個整體,顯示五種質量的鉆石所占比例體現出來。如果不加這一句,就是每種質量的鉆石各為一組來計算,那么比例就都是100%,顯示五根大黑柱子,實在是丑出新高度。

在代碼中強調統計變換

以stat_summary為例。

ggplot(data = diamonds) +
stat_summary(
mapping = aes(x = cut, y = depth),
fun.ymin = min,
fun.ymax = max,
fun.y = median
)

image.png

(小潔碎碎念:stat_summary的默認幾何圖形是geom_pointrange,而這個geom_pointrange默認的統計變換卻是identity,如果你不知道其中貓膩,就會發現他倆代碼竟然不可逆。。。一夫多妻的節奏呀。)

因此要用幾何對象函數重復這個圖形,則需要指定stat_summary。

ggplot(data = diamonds) +
geom_pointrange(
mapping = aes(x = cut, y = depth),
stat = "summary",
fun.ymin = min,
fun.ymax = max,
fun.y = median
)

image.png

8.位置調整-position

在直方圖中,顏色映射是由color和fill之分的,表示邊框和填充。如果要設置無填充(也就是透明),則fill=NA。NA在數據框里表示空值。

(1)直方圖之堆疊式-fill

堆疊式就是在基礎條形圖上添加第三個變量,將這個變量映射給fill,就會在每個條形中分出不同顏色且不同比例的矩形。

ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut,fill=clarity))

image.png

除了映射的方式以外,position參數設置位置調整功能。position="fill"也可以設置,但這樣設置的每組堆疊條形具有相同的高度。

ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity), position = "fill")

image.png

筆者補充:感覺這種堆疊方式并不如設置fill映射,因為他突出的是比例,每組之間數值的差異被忽略了。

(2)直方圖之對象直接顯示-identity

ggplot(data = diamonds, mapping = aes(x = cut, fill = clarity)) +
geom_bar(alpha = 1/5, position = "identity")


image.png

ggplot(data = diamonds, mapping = aes(x = cut, colour = clarity)) +
geom_bar(fill = NA, position = "identity")


image.png

書中23頁identity設置透明度和無填充的圖是錯的!

正確的是這樣

(3)直方圖之并列式-dodge

ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")


image.png

(4)散點圖之擾動-jitter

書中翻譯為抖動,我認為擾動更精確。

以mpg的displ和hwy散點圖為例

ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))


image.png

在這個例子中,數據有234行,圖中卻只有126個點。這就是因為有些點是重疊的,圖上雖然顯示一個點,但其實是好幾個點重疊成了一個。

jitter可以為點添加隨機擾動,使重疊的點分散開。

position參數設為jitter的快速實現:geom_jitter()

除了geom_jitter外,geom_point也可以展示重疊點,會根據重疊點的個數調整大小。

(5)stack-堆疊 無

ggplot(series, aes(time, value, group = type)) +

geom_line(aes(colour = type), position = "stack") +

geom_point(aes(colour = type), position = "stack")

ggplot(series, aes(time, value, group = type)) +

geom_line(aes(colour = type)) +

geom_point(aes(colour = type))

設置position_stack(上)和不設置(下)的區別:

9.坐標系

(1)coord_flip翻轉坐標系

ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
geom_boxplot() +
coord_flip()


image.png

(2)coord_quickmap

為地圖設置長寬比

此處需要加載maps包,否則會報錯。

library(maps)

如果報錯則:install.packages("maps")

library(maps)

nz <- map_data("nz")

ggplot(nz, aes(long, lat, group = group)) +
geom_polygon(fill = "white", colour = "black")


image.png

ggplot(nz, aes(long, lat, group = group)) +
geom_polygon(fill = "white", colour = "black") +
coord_quickmap()


image.png

geom_polygon 是多邊形圖

(3)coord_polar 極坐標系

bar <- ggplot(data = diamonds) +
geom_bar(
mapping = aes(x = cut, fill = cut),
show.legend = FALSE,
width = 1
) +
theme(aspect.ratio = 1) +
labs(x = NULL, y = NULL)
bar + coord_flip()

image.png

bar + coord_polar()

image.png

ps:習題中涉及的

(1)關于餅圖/牛眼圖/圓圈圖

ggplot(mpg, aes(x = factor(1), fill = drv)) +
geom_bar()

image.png

ggplot(mpg, aes(x = factor(1), fill = drv)) +
geom_bar(width = 1) +
coord_polar(theta = "y")

image.png

要點:

不分組,只有一個因子型變量drv。

如果作圖不設置width,餅圖中間會出現一個白色圈圈。經測試發現width等于幾在圖上并沒有區別,但是不設置卻不行。

theta是角度的意思。如果不設置這個參數就會得到牛眼圖哈哈哈哈哈哈。

作者取名叫牛眼圖

多圓圈圖

ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity), position = "fill") +
coord_polar(theta = "y")


image.png

(2)第三題

geom_abline:添加線條

coord_fixed:保證橫縱坐標的標尺一致,線條呈45°角

10.完整的繪圖模板

ggplot(data = <DATA>) +

<GEOM_FUNCTION>(

mapping = aes(<MAPPINGS>),

stat = <STAT>,

position = <POSITION>

) +

<COORDINATE_FUNCTION> +

<FACET_FUNCTION>

圖形構建的過程

(1)數據集

(2)統計變換

(3)幾何對象

(4)映射fill

(5)放置

(6)映射x/y

參考
詳解《R數據科學》--第一章ggplot2

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375