使用R ggplot绘制宽格式数据图表

6
我有一个数据框(如下所示),显示不同地区在不同年份的销售情况。最后一列计算了该地区在三年内的所有销售额之和。
我是R语言的新手,想使用ggplot创建一个散点图来分析数据。横轴是三年,纵轴是销售额。
理想情况下,每个地区都应该有自己的线条,并且在2013、2014、2015年和2016年都应该有点(除了一些NA值)。然后我想根据地区对每条线进行着色。总和列不应出现在图表中。您有什么建议?
df <- structure(list(Region = structure(1:6, 
                                  .Label = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", 
                                             "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U"), 
                                  class = "factor"), 
               "2016" = c(8758.82, 25559.89, 30848.02, 8696.99, 3621.12, 5468.76), 
               "2015" = c(26521.67, 89544.93, 92825.55, 28916.4, 14004.54, 16618.38), 
               "2014" = c(NA, NA, 199673.73, 37108.09, 16909.87, 20610.58), 
               "2013" = c(27605.35, NA, 78794.31, 31824.75, 17990.21, 17307.11), 
               "Total Sales" = c(35280.49, 115104.82, 323347.3, 74721.48, 34535.53, 42697.72)), 
          row.names = c(NA, 6L), class = "data.frame") 

enter image description here


请问您能否提供一份数据样本以便他人帮助您解决问题(请勿使用 str()head() 或截图)?您可以使用 reprexdatapasta 包来协助您完成此操作。同时,您也可以参考 Help me Help youHow to make a great R reproducible example? - Tung
我试图附加一张图片,但它显示我没有权限。数据不可见吗? - Jacob Smith
3
请阅读我上面发布的链接。图片或截图并不有用,因为我们无法将其复制粘贴到我们的 R 会话中。 - Tung
1
结构(列表)(区域=结构(1:6,.标签= c(“ A”,“ B”,“ C”, “ D”,“ E”,“ F”,“ G”,“ H”,“ I”,“ J”,“ K”,“ L”,“ M”,“ N”,“ O”,“ P”, “ Q”,“ R”,“ S”,“ T”,“ U”),类=“因子”),2016= c(8758.82, 25559.89,30848.02,8696.99,3621.12,5468.76),2015= c(26521.67, 89544.93,92825.55,28916.4,14004.54,16618.38),2014= c(NA, NA,199673.73,37108.09,16909.87,20610.58),2013= c(27605.35, NA,78794.31,31824.75,17990.21,17307.11),总销售额= c(35280.49, 115104.82,323347.3,74721.48,34535.53,42697.72)),行名= c(NA, 6L),类=“数据框”) - Jacob Smith
2
非常抱歉,我完全误解了您的评论。唉,作为一个新手很难隐藏!我在之前的评论中提供的内容是否有效?如果无效,我会尝试另一种方法。 - Jacob Smith
1个回答

8

您的数据采用宽格式,因此最好将其转换为长格式以便使用ggplot。在这里,我使用tidyr :: gather()来完成此操作。

library(tidyr)
library(ggplot2)

df_long <- df %>% 
  gather(Year, Sales, -Region)
df_long
#>    Region        Year     Sales
#> 1       A        2016   8758.82
#> 2       B        2016  25559.89
#> 3       C        2016  30848.02
#> 4       D        2016   8696.99
#> 5       E        2016   3621.12
#> 6       F        2016   5468.76
#> 7       A        2015  26521.67
#> 8       B        2015  89544.93
#> 9       C        2015  92825.55
#> 10      D        2015  28916.40
#> 11      E        2015  14004.54
#> 12      F        2015  16618.38
#> 13      A        2014        NA
#> 14      B        2014        NA
#> 15      C        2014 199673.73
#> 16      D        2014  37108.09
#> 17      E        2014  16909.87
#> 18      F        2014  20610.58
#> 19      A        2013  27605.35
#> 20      B        2013        NA
#> 21      C        2013  78794.31
#> 22      D        2013  31824.75
#> 23      E        2013  17990.21
#> 24      F        2013  17307.11
#> 25      A Total Sales  35280.49
#> 26      B Total Sales 115104.82
#> 27      C Total Sales 323347.30
#> 28      D Total Sales  74721.48
#> 29      E Total Sales  34535.53
#> 30      F Total Sales  42697.72

绘图:在 aes 中指定 color = Regiongroup = Region,这样 ggplot 就知道如何选择颜色并绘制线条。
ggplot(df_long, aes(x = Year, y = Sales, color = Region, group = Region)) +
  geom_point() +
  geom_line() +
  scale_color_brewer(palette = 'Dark2') +
  theme_classic(base_size = 12)
#> Warning: Removed 3 rows containing missing values (geom_point).
#> Warning: Removed 2 rows containing missing values (geom_path).

也可以使用facet_grid()

ggplot(df_long, aes(x = Year, y = Sales, group = Region)) +
  geom_point() +
  geom_line() +
  facet_grid(Region ~., scales = 'free_y') +
  theme_bw(base_size = 12)
#> Warning: Removed 3 rows containing missing values (geom_point).
#> Warning: Removed 2 rows containing missing values (geom_path).

这篇文章是由reprex package (v0.2.1.9000)在2018年10月12日创建的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接