前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据可视化完美指南-R-Python

数据可视化完美指南-R-Python

作者头像
章鱼猫先生
发布2021-10-15 13:47:20
6020
发布2021-10-15 13:47:20
举报
文章被收录于专栏:BioIT爱好者

从数据到图表

有什么样的数据做什么样的图

作者提供了一张树状图,帮助并引导我们找到合适自己数据的的可视化方式 What kind of data do you have? Pick the main type using the buttons below. Then let the decision tree guide you toward your graphic possibilities.

着便是有名的:https://www.data-to-viz.com/ 网站。

Yan Holtz 和 Conor Healys 两个人关系很好,一起在业余时间开发了这个网站。基于 R 和 Python 做的源代码,这里我们不仅可以得到大量优秀的源代码,同时我们可以得到一张决策树,用于知道如何使用代码。这两个人相当厉害了,不仅仅给大家了工具,还叫大家如何使用。作为无私的分享,如果对大家有用,请在文章中致谢他们。如果我们需要交流代码,和谁交流呢?那必须是 Yan Holtz,这位主要负责代码部分。Conor Healys 负责图形设计工作。

可视化架构

基于网站我们来做一个示例

大部分情况,我们的数据都是二维数据框:下面就二维数据框的数据,变量指定为有顺序的变量,我们进行出图:

基于有顺序的二维数据框的出图

这是基于时间序列的一份二维数据。作者提供了数据下载地址。as.Date 函数将数据转化为时间序列。

代码语言:javascript
复制
# Libraries
library(tidyverse)
代码语言:javascript
复制
## -- Attaching packages ----------------------------------------------------------------------------------------------------------- tidyverse 1.2.1 --
代码语言:javascript
复制
## √ ggplot2 3.2.0     √ purrr   0.3.2
## √ tibble  2.1.3     √ dplyr   0.8.3
## √ tidyr   0.8.3     √ stringr 1.4.0
## √ readr   1.3.1     √ forcats 0.4.0
代码语言:javascript
复制
## -- Conflicts -------------------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
代码语言:javascript
复制
library(hrbrthemes)
代码语言:javascript
复制
## NOTE: Either Arial Narrow or Roboto Condensed fonts are required to use these themes.
代码语言:javascript
复制
##       Please use hrbrthemes::import_roboto_condensed() to install Roboto Condensed and
代码语言:javascript
复制
##       if Arial Narrow is not on your system, please see https://bit.ly/arialnarrow
代码语言:javascript
复制
library(plotly)
代码语言:javascript
复制
##
## Attaching package: 'plotly'
代码语言:javascript
复制
## The following object is masked from 'package:ggplot2':
##
##     last_plot
代码语言:javascript
复制
## The following object is masked from 'package:stats':
##
##     filter
代码语言:javascript
复制
## The following object is masked from 'package:graphics':
##
##     layout
代码语言:javascript
复制
library(patchwork)
# install.packages("babynames")
library(babynames)
library(viridis)
代码语言:javascript
复制
## Loading required package: viridisLite
代码语言:javascript
复制
# ?as.Date
# Load dataset from github
data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/3_TwoNumOrdered.csv", header=T)
data$date <- as.Date(data$date)

这里仅仅提取最后的十个数据进行点线图的可视化

代码语言:javascript
复制
# Plot
data %>%
  tail(10) %>%
  ggplot( aes(x=date, y=value)) +
    geom_line(color="#69b3a2") +
    geom_point(color="#69b3a2", size=4) +
    ggtitle("Evolution of Bitcoin price") +
    ylab("bitcoin price ($)") +
    theme_ipsum()

这里使用最后的 60 个数据进行可视化

这里做了折线图和点线图。我们 ggplot 出图就是这么随意,图形相加就是拼图。

代码语言:javascript
复制
# Plot
p1 <- data %>%
  tail(60) %>%
  ggplot( aes(x=date, y=value)) +
    geom_line(color="#69b3a2") +
    ggtitle("Line chart") +
    ylab("bitcoin price ($)") +
    theme_ipsum()

p2 <- data %>%
  tail(60) %>%
  ggplot( aes(x=date, y=value)) +
    geom_line(color="#69b3a2") +
    geom_point(color="#69b3a2", size=2) +
    ggtitle("Connected scatterplot") +
    ylab("bitcoin price ($)") +
    theme_ipsum()

p = p1 + p2
p

散点图展示时间序列

代码语言:javascript
复制
# Plot
data %>%
  tail(60) %>%
  ggplot( aes(x=date, y=value)) +
    geom_point(color="#69b3a2", size=2) +
    ggtitle("Line chart") +
    ylab("bitcoin price ($)") +
    theme_ipsum()

分组时间序列可视化

代码语言:javascript
复制
library(babynames)

# Load dataset
data <- babynames %>%
  filter(name %in% c("Ashley", "Amanda")) %>%
  filter(sex=="F")

#plot
data %>%
  ggplot( aes(x=year, y=n, group=name, color=name)) +
    geom_line() +
    scale_color_viridis(discrete = TRUE, name="") +
    theme(legend.position="none") +
    ggtitle("Popularity of American names in the previous 30 years") +
    theme_ipsum()

geom_segment 函数突出展示变化趋势

代码语言:javascript
复制
library(grid) # needed for arrow function
library(ggrepel)

# data
tmp <- data %>%
  filter(year>1970) %>%
  select(year, name, n) %>%
  spread(key = name, value=n, -1)

# data for date
tmp_date <- tmp %>% sample_frac(0.3)

tmp%>%
  ggplot(aes(x=Amanda, y=Ashley, label=year)) +
     geom_point(color="#69b3a2") +
     geom_text_repel(data=tmp_date) +
     geom_segment(color="#69b3a2",
                  aes(
                    xend=c(tail(Amanda, n=-1), NA),
                    yend=c(tail(Ashley, n=-1), NA)
                  ),
                  arrow=arrow(length=unit(0.3,"cm"))
      ) +
      theme_ipsum()
代码语言:javascript
复制
data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/3_TwoNumOrdered.csv", header=T)
data$date <- as.Date(data$date)

p1 <- data %>%
  tail(10) %>%
  ggplot( aes(x=date, y=value)) +
    geom_line(color="#69b3a2") +
    geom_point(color="#69b3a2", size=4) +
    ggtitle("Not cuting") +
    ylab("bitcoin price ($)") +
    theme_ipsum() +
    ylim(0,10000)

p2 <- data %>%
  tail(10) %>%
  ggplot( aes(x=date, y=value)) +
    geom_line(color="#69b3a2") +
    geom_point(color="#69b3a2", size=4) +
    ggtitle("Cuting") +
    ylab("bitcoin price ($)") +
    theme_ipsum()

p1 + p2

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BioIT爱好者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 有什么样的数据做什么样的图
    • 可视化架构
      • 基于网站我们来做一个示例
        • 基于有顺序的二维数据框的出图
          • 这里仅仅提取最后的十个数据进行点线图的可视化
            • 这里使用最后的 60 个数据进行可视化
              • 散点图展示时间序列
                • 分组时间序列可视化
                  • geom_segment 函数突出展示变化趋势
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档