【R语言】ggplot2可视化

pacman::p_load(dplyr,ggplot2,datasauRus,tidyverse,gghalves,patchwork)

01 散点图

#查看datasauRus数据
datasaurus_dozen %>% 
  View()
#显示对象的结构
str(datasaurus_dozen)
#删除重复的元素/行
unique(datasaurus_dozen$dataset)
#筛选dataset每个数据xy的平均值、方差等数据
datasaurus_dozen %>% 
  group_by(dataset) %>% 
  summarize(
    mean_x= mean(x),
    mean_y = mean(y),
    std_dev_x = sd(x),
    std_dev_y = sd(y),
    corr_x_y = cor(x,y)
  )
#按照类别画散点图,使用facet_wrap()函数通过“dataset列”进行分面展示。
ggplot(datasaurus_dozen, aes(x=x, y=y,colour=dataset))+  
  geom_point()+  
  theme_void()+  
  theme(legend.position = "none")+  
  facet_wrap(~dataset, ncol=3)

用法:
ggplot(data=数据源) + <GEOM_FUNCTION> (
mapping=aes(x=,y=),
stat=<STAT> ,
position=<POSSITION>)+
<COORDINATE_FUNCION> +
<FACET_FUNCTION>
1.在aes内添加,给第三个变量增加样式
alpha=变量
alpha=factor(变量)
如果在aes外增加属性则适用于所有特点:color 边框颜色,fill填充颜色
2.分割成多个图facet_wrap(~变量)
其中,两个变量对图形进行分面 facet_grid(变量1~变量2)
3.stat statistical transformation
stat_count()
stat_summary()
4.Positon5种方式
point---① jitter (抖动->分散,原理point并不是一个精确点) 快速实现 geom_jitter()
bar---② indentity / ③fill / ④dodge / ⑤stack

添加主题和背景
ggplot2有多个内置主题,其中:
默认主题是theme_grey(),淡灰色背景和白色网格
theme_bw(): 是theme_grey()的变体,白色背景和灰色网格线theme_linedraw(): 白色背景黑色线条
theme_light(): 和theme_linedraw()很像,区别是线条为灰色theme_dark():黑色背景的theme_light(),可以用来画薄彩色线条
theme_minimal():简约主题
theme_classic(): 只有x、y轴没有背景和网格线
theme_void(): 完全空白的主题
theme(legend.position = "none") 图例的位置,“ none”、“ left”、“ right”、“ bottom”、“ top”或双元素数值向量

> unique(datasaurus_dozen$dataset)
 [1] "dino"       "away"       "h_lines"    "v_lines"    "x_shape"   
 [6] "star"       "high_lines" "dots"       "circle"     "bullseye"  
[11] "slant_up"   "slant_down" "wide_lines"


>datasaurus_dozen %>% group_by(dataset) %>% summarize()
# A tibble: 13 x 6
   dataset    mean_x mean_y std_dev_x std_dev_y corr_x_y
   <chr>       <dbl>  <dbl>     <dbl>     <dbl>    <dbl>
 1 away         54.3   47.8      16.8      26.9  -0.0641
 2 bullseye     54.3   47.8      16.8      26.9  -0.0686
 3 circle       54.3   47.8      16.8      26.9  -0.0683
 4 dino         54.3   47.8      16.8      26.9  -0.0645
 5 dots         54.3   47.8      16.8      26.9  -0.0603
 6 h_lines      54.3   47.8      16.8      26.9  -0.0617
 7 high_lines   54.3   47.8      16.8      26.9  -0.0685
 8 slant_down   54.3   47.8      16.8      26.9  -0.0690
 9 slant_up     54.3   47.8      16.8      26.9  -0.0686
10 star         54.3   47.8      16.8      26.9  -0.0630
11 v_lines      54.3   47.8      16.8      26.9  -0.0694
12 wide_lines   54.3   47.8      16.8      26.9  -0.0666
13 x_shape      54.3   47.8      16.8      26.9  -0.0656
散点图

02 条形图极坐标化geom_bar()+coord_polar()

用法:coord_polar()学习ggplot2 饼图
coord_polar(theta="x",start=0,direction=1,clip="on")
theta:x 轴极化,x 轴刻度值对应扇形弧度,y 轴刻度值对应圆环半径;y 轴极化,y 轴刻度值对应扇形弧度,x 轴长度对应扇形半径。
start:起始位置为距离 12 点针方向的度数。
direction:1, 顺时针; -1, 逆时针。
clip:Should drawing be clipped to the extent of the plot panel?

#雷达图,theta默认是x
diamonds %>%
  ggplot(aes(cut,fill=cut))+
  geom_bar()+
  coord_polar()
雷达图
#甜甜圈图,theta="y"
diamonds %>%
  ggplot(aes(cut,fill=cut))+
  geom_bar()+
  coord_polar(theta="y") 
甜甜圈图
#把cyl(值有4、6和8)列各个值的数量做成柱状图
#柱状图改饼图,长度变成弧度
pie <- ggplot(mtcars,aes(x=factor(1),fill=factor(cyl)))+
  geom_bar(width=1) + coord_polar(theta="y")
#柱状图改成环状图
ring  <- ggplot(mtcars,aes(x=factor(1),fill=factor(cyl)))+
  geom_bar(width=1) + coord_polar(theta="x")
饼图

环状图
#R可视化扩展-图像合并
p1 <- ggplot(data = datasaurus_dozen, mapping = aes(x =x, y=y, color = dataset)) +
  geom_point() +
  facet_wrap(~dataset) +
  coord_polar() +
  theme_bw()
#图像左右拼接
pie+p1
#图像上下拼接
pie/p1
左右拼接

上下拼接
#展示合适的数据量
#增加透明度 alpha
d5k <- sample_n(diamonds,5000)
#随机抽取 sample
d5k %>% 
  ggplot(aes(carat,price))+
  geom_point(alpha=0.1)
随机抽取+增加透明度

03 动态图bubble

酷炫的动画图

install_github("dgrtwo/gganimate",force = TRUE)   #安装gganimate包
pacman::p_load(dplyr,ggplot2,dslabs,gganimate,gifski,av,png,tidyverse,devtools)

#对数据进行分组
data(gapminder)
west <- c("Western Europe","Northern Europe","Southern Europe",
         "Northern America","Australia and New Zealand")
gapminder1 <- gapminder %>%
  mutate(group = case_when(
    .$region %in% west ~ "老达",
    .$region %in% c("Eastern Asia","South-Eastern Asia") ~ "远东",
    .$region %in% c("Caribbean","Central America","South America") ~ "拉美",
    .$continent=="Africa" & .$region!="Northern Africa" ~ "非非",
    TRUE ~ "其他"))

gapminder1 <-  gapminder1 %>%
  mutate(group = factor(group,levels = rev(c("其他","拉美","远东","非非","老达"))))

years <-  seq(1962, 2013)
# 去掉空值,建立新的列,数值变小
gapminder2 <- filter(gapminder1,year %in% years & !is.na(group) &
             !is.na(fertility) & !is.na(life_expectancy)) %>% 
             mutate(population_in_millions = population / 10^6)    
# a %in% b ,判断b的值是否在a中; filter筛选;mutate 增加新的列
gapminder2 %>% view()
gapminder2$year
str(gapminder2)

p <- gapminder2 %>% ggplot(aes(fertility,y=life_expectancy,color=group,
     size=population_in_millions) )+
     geom_point(shape=16)+   #shape = 16 为实心圆点
     guides(size=FALSE)+   #移除由ase中匹配的size生成的图例
     theme(legend.title=element_blank() )+   
     coord_cartesian(ylim=c(30,85))+    #纵轴截距
     #下面最后三行用到动态图
     labs(title='{frame_time}年', x='生育率', y='人均寿命预期')+    #labs 修改轴、图例等标签, frame_time给出了当前帧对应的时间
     transition_time(year)+   #根据年变化
     ease_aes('linear')   #ease_aes()定义了一个值在调整期间如何变化为另一个值
p

anim_save("C:/Users/apple/Desktop/ferta.gif")
bubble
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容