R語言 使用ggplot2繪制好看的分組散點(diǎn)圖
我們以iris數(shù)據(jù)集為例,該數(shù)據(jù)集包括花萼的長(zhǎng)度和寬度,花瓣的長(zhǎng)度和寬度,以及物種,如下圖:
本文我們要繪制不同物種下花萼的長(zhǎng)度和寬度的分布情況,以及二者之間的相關(guān)性關(guān)系。
1. 首先載入ggplot2包,
library(ggplot2)
2. 然后進(jìn)行g(shù)gplot(data = NULL, mapping = aes(), ..., environment = parent.frame())繪制,在繪制中第一個(gè)參數(shù)是數(shù)據(jù),第二個(gè)參數(shù)是數(shù)據(jù)映射,是繪制的全局變量,其中包含的參數(shù)有x,y,color,size,alpha,shape等。
例如:ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)),然后通過快捷散點(diǎn)繪制
+geom_point(size = 2.0, shape = 16),顏色代表不同的物種,如下圖:
3. 上面顯示的是最原始的散點(diǎn)繪制,通過顏色區(qū)分不同的物種,那么如何進(jìn)行效果的提升呢?
首先是可以進(jìn)行分面,使得不同物種的對(duì)比效果更為顯著,這里使用+facet_wrap( ~ Species),效果如下:
4. 通過分面后對(duì)比效果好了不少,如果想看下不同物種下花萼長(zhǎng)度與寬度的關(guān)系呢?可以使用+geom_smooth(method = "loess"),效果圖如下:
5. 通過上面的操作效果好了很多,但是還是感覺不夠高大上,那我們可以使用library(ggthemes)這個(gè)包進(jìn)行精修一下,通過修改theme,使用+theme_solarized(),效果如下:
還有更多的theme選擇,例如+theme_wsj(),效果如下:
這樣我們的圖是不是高大上了很多呢,所以其實(shí)數(shù)據(jù)可視化也沒有多難。最后給下源碼:
library(ggthemes) library(ggplot2) ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) + geom_point(size = 2.0, shape = 16) + facet_wrap( ~ Species) + geom_smooth(method = "loess")+ theme_wsj()
補(bǔ)充:R語言 畫圖神器ggplot2包
ggplot2
R語言里畫圖最好用的包啦。感覺圖都挺清晰的,就懶得加文字了(或者以后回來補(bǔ)吧>.)前面幾個(gè)圖挺基礎(chǔ)的,后面也許會(huì)有沒見過的ggplot用法哦。
Install Package
install.packages("ggplot2") library(ggplot2)
Scatter Plot
為了方便展示,用gapminder的數(shù)據(jù)
if(!require(gapminder)) install.packages("gapminder") library(gapminder) gapminder
數(shù)據(jù)大概是這樣的
假設(shè)我們現(xiàn)在想要知道2007年lifeExp和人均GDP之間的關(guān)系。
先篩選數(shù)據(jù)
library(dplyr) gapminder_2007 <- gapminder %>% filter(year == 2007)
畫lifeExp和gdpPercap關(guān)系的散點(diǎn)圖,x為gdpPercap,y為lifeExp。
ggplot(gapminder_2007,aes(x = gdpPercap, y = lifeExp))+geom_point()
看的出來lifeExp與gdpPercap存在近似lifeExp=log(gdpPercap)的關(guān)系,對(duì)x軸的數(shù)值進(jìn)行l(wèi)og值處理。另外,為了呈現(xiàn)更多信息,用顏色標(biāo)記國(guó)家所在的洲,并用點(diǎn)的大小表示人口數(shù)量。
ggplot(gapminder_2007,aes(x = gdpPercap, y = lifeExp, color = continent, size = pop))+ geom_point()+scale_x_log10()+theme_minimal()+ labs(x = "GDP per capita", y = "Life expectancy", title = "Life expectancy increases as GDP per capita increases", caption = "Data source: gapminder")
另外一種呈現(xiàn)方式如下:
加入了回歸線和坐標(biāo)軸的histogram。
plot <- ggplot(gapminder_2007, aes(x = gdpPercap, y = lifeExp)) + geom_point()+geom_smooth(method="lm")+scale_x_log10()+ labs(x = "GDP per capita", y = "Life expectancy", title = "Life expectancy increases as GDP per capita increases", caption = "Data source: gapminder") ggMarginal(plot, type = "histogram", fill="transparent") #ggMarginal(plot, type = "boxplot", fill="transparent")
Histogram
gapminder_gdp2007 <- gapminder %>% filter(year == 2007, continent == "Americas") %>% mutate(country = fct_reorder(country,gdpPercap,last)) ggplot(gapminder_gdp2007, aes(x=country, y = gdpPercap))+ geom_col(fill="skyblue", color="black")+ labs(x = "Country", y = "GDP per capita", title = "GDP per capita in North America and South America, 2007", caption = "Data source: gapminder")+ coord_flip()+theme_minimal()
Line Plot
gapminder_pop <- gapminder %>% filter(country %in% c("United States","China")) ggplot(gapminder_pop,aes(x = year, y = pop, color = country))+ geom_line(lwd = 0.8)+theme_light()+ labs(x = "Year", y = "Population", title = "Population in China and United States, 1953-2007", caption = "Data source: gapminder")
Facet Plot
gapminder_gdp <- gapminder %>% group_by(year, continent) %>% summarize(avg_gdp = mean(gdpPercap)) ggplot(gapminder_gdp,aes(x = year, y = avg_gdp, color = continent))+ geom_line(lwd = 0.8)+theme_light()+facet_wrap(~continent)+ labs(x = "Year", y = "Average GDP per capita", title = "Average GDP per capita change in different continent", caption = "Data source: gapminder")+ scale_x_continuous(breaks=c(1955,1970,1985,2000))
Path Plot
gapminder_lifeexp <- gapminder %>% filter(year %in% c(1957,2007), continent == "Europe") %>% arrange(year) %>% mutate(country = fct_reorder(country,lifeExp,last)) ggplot(gapminder_lifeexp) +geom_path(aes(x = lifeExp, y = country), arrow = arrow(length = unit(1.5, "mm"), type = "closed")) + geom_text( aes(x = lifeExp, y = country, label = round(lifeExp, 1), hjust = ifelse(year == 2007,-0.2,1.2)), size =3, family = "Bookman", color = "gray25")+ scale_x_continuous(limits=c(45, 85))+ labs( x = "Life expectancy", y = "Country", title = "People live longer in 2007 compared to 1957", subtitle = "Life expectancy in European countries", caption = "Data source: gapminder" )
Density Plot
gapminder_1992 <- gapminder %>% filter(year == 1992) ggplot(gapminder_1992, aes(lifeExp))+theme_classic()+ geom_density(aes(fill=factor(continent)), alpha=0.8) + labs( x="Life expectancy", title="Life expectancy group by continent, 1992", caption="Data source: gapminder", fill="Continent")
Slope Chart
gapminder_lifeexp2 <- gapminder %>% filter(year %in% c(1977,1987,1997,2007), country %in% c("Canada", "United States","Mexico","Haiti","El Salvador", "Guatemala","Jamaica")) %>% mutate(lifeExp = round(lifeExp)) ylabs <- subset(gapminder_lifeexp2, year==head(year,1))$country yvals <- subset(gapminder_lifeexp2, year==head(year,1))$lifeExp ggplot(gapminder_lifeexp2, aes(x=as.factor(year),y=lifeExp)) + geom_line(aes(group=country),colour="grey80") + geom_point(colour="white",size=8) + geom_text(aes(label=lifeExp), size=3, color = "black") + scale_y_continuous(name="", breaks=yvals, labels=ylabs)+ theme_classic()+ labs(title="Life Expectancy of some North America countries change from 1977 to 2007") + theme(axis.title=element_blank(), axis.ticks = element_blank(), plot.title = element_text(hjust=0.5))
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
- R語言ggplot2設(shè)置圖例(legend)的操作大全
- R語言 ggplot2改變柱狀圖的順序操作
- R語言ggplot2之圖例的設(shè)置
- R語言ggplot2包之坐標(biāo)軸詳解
- R語言ggplot2圖例標(biāo)簽、標(biāo)題、順序修改和刪除操作實(shí)例
- R語言ggplot2邊框背景去除的實(shí)現(xiàn)
- R語言學(xué)習(xí)ggplot2繪制統(tǒng)計(jì)圖形包全面詳解
- R語言 解決安裝ggplot2報(bào)錯(cuò)的問題
- R語言ggplot2實(shí)現(xiàn)將多個(gè)照片拼接到一起
- R語言ggplot2繪圖安裝與調(diào)試
相關(guān)文章
R語言關(guān)于生存分析知識(shí)點(diǎn)總結(jié)
在本篇文章里,小編給大家整理的是一篇關(guān)于R語言生存分析的相關(guān)知識(shí)點(diǎn)及實(shí)例內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)下吧。2021-05-05R語言數(shù)據(jù)可視化繪圖Dot plot點(diǎn)圖畫法示例
這篇文章主要為大家介紹了R語言數(shù)據(jù)可視化繪圖Dot plot點(diǎn)圖的畫法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02R語言 實(shí)現(xiàn)list類型數(shù)據(jù)轉(zhuǎn)換
這篇文章主要介紹了R語言 實(shí)現(xiàn)list類型數(shù)據(jù)轉(zhuǎn)換,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03R語言繪制數(shù)據(jù)可視化Dumbbell?plot啞鈴圖
這篇文章主要為大家介紹了R語言繪制數(shù)據(jù)可視化Dumbbell?plot啞鈴圖的實(shí)現(xiàn)步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02