簡體   English   中英

使用ggplot geom_line可視化兩年之間的差異

[英]Using ggplot geom_line to visualize a difference between two years

我正在嘗試可視化包含多個國家/地區的數據集,每個國家/地區都有兩年的變量,並且每年都有一個值(世界新聞自由指數)。 我已經在stackoverflow和其他站點上搜索了答案,但是我找不到任何可以幫助我解決這個問題的方法。 這是在其上使用ddplyr熔解后的數據集:

pfindex2narrow = reshape2::melt(pfindex2, id.vars = 'Origin')



 pfindex2narrow
             Origin variable value
1           Eritrea     2014 84.86
2        NorthKorea     2014 83.25
3      Turkmenistan     2014 80.83
4             Syria     2014 77.29
5             China     2014 73.55
6           Vietnam     2014 72.63
7             Sudan     2014 72.34
8              Iran     2014 72.32
9           Somalia     2014 72.31
10             Laos     2014 71.25
11         Djibouti     2014 71.04
12             Cuba     2014 70.21
13            Yemen     2014 66.36
14 EquatorialGuinea     2014 66.23
15       Uzbekistan     2014 61.14
16      SaudiArabia     2014 59.41
17          Bahrain     2014 58.69
18       Azerbaijan     2014 58.41
19           Rwanda     2014 56.57
20            Libya     2014 45.99
21          Eritrea     2013 84.83
22       NorthKorea     2013 81.96
23     Turkmenistan     2013 80.81
24            Syria     2013 77.04
25            China     2013 72.91
26          Vietnam     2013 72.36
27            Sudan     2013 71.88
28             Iran     2013 72.29
29          Somalia     2013 73.19
30             Laos     2013 71.22
31         Djibouti     2013 70.34
32             Cuba     2013 70.92
33            Yemen     2013 67.26
34 EquatorialGuinea     2013 67.95
35       Uzbekistan     2013 61.01
36      SaudiArabia     2013 58.30
37          Bahrain     2013 58.26
38       Azerbaijan     2013 52.87
39           Rwanda     2013 56.57
40            Libya     2013 39.84

目的是可視化每年指數之間的差異,並顯示其是遵循下降趨勢還是上升趨勢。 我自己的嘗試如下。 我正在嘗試使用ggplot2對此進行可視化,但是,正如您所看到的,幾乎沒有問題(即,行似乎是任意的,並且與實際索引值無關)。

    b = ggplot(pfindex2narrow, aes(x = variable, y = value, group = Origin)) + 
  geom_line() + 
  geom_text(aes(label=value, hjust = 0.5), size = 4)
b + facet_wrap(~ Origin, ncol = 2) + 
  theme(
    axis.text.x = element_text(angle = 45, vjust = 0.5, hjust = 0.5),
    axis.text.y = element_blank(),
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    axis.ticks = element_blank(),
    panel.grid.major.y = element_blank(),
    panel.grid.minor.y = element_blank(),
    panel.grid.major.x = element_blank(),
    panel.grid.minor.x = element_blank()
  )

這是輸出:

上面代碼的輸出

可悲的是,我沒有解決該問題的想法,而且我有些固執。 也許您對如何解決這個問題有任何想法。

謝謝!

這里有一些選擇:

首先,讓我們略微縮短數據名稱,以減少鍵入次數並更易於閱讀。 我還對數據進行了重新排序,因此更容易快速了解發生的情況。

d <- pfindex2narrow
d$variable <- factor(d$variable)
d$Origin <- factor(
  d$Origin, 
  levels = (d$Origin)[rev(order(d$value[d$variable == '2014']))]
)

我們可以畫線圖,但是看起來很混亂:

ggplot(d, aes(x = variable, y = value, col = Origin, group = Origin)) + 
  geom_line(size = 1) + 
  scale_x_discrete(expand = c(0.1, 0), limits = c('2013', '2014', 'country')) +
  theme_bw()

在此處輸入圖片說明

我不是粉絲。 (如果我們改為繪制國家/地區的排名,它看起來可能會好得多。)

也許我們可以改用酒吧:

ggplot(d, aes(x = Origin, y = value, fill = variable)) + 
  geom_bar(stat = 'identity', position = 'dodge') + 
  theme_bw() + 
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

在此處輸入圖片說明

已經更好了! 但是0的小節可能無法很好地利用我們的空間。 另一種選擇是使用積分。

d2 <- d
d2$x <- as.numeric(d2$Origin) + ifelse(d2$variable == '2013', -0.25, 0.25)
ggplot(d2, aes(x = Origin, y = value, col = variable)) + 
  geom_point(position = position_dodge(w = 1)) +
  geom_line(aes(x = x, group = Origin), col = 1) +
  theme_bw() + 
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))

在此處輸入圖片說明

最后,如果只有更改很重要,而不是絕對值,那么我們可以這樣表達:

library(dplyr)
d3 <- d %>% 
  group_by(Origin) %>% 
  arrange(variable) %>% 
  summarize(dif = diff(value)) %>% 
  arrange(dif)
d3$Origin <- factor(d3$Origin, levels = unique(d3$Origin))

ggplot(d3, aes(Origin, dif, fill = Origin)) + 
  geom_bar(stat = 'identity', position = 'identity') +
  coord_flip() +
  theme_minimal() +
  guides(fill = 'none') +
  xlab('') + ylab('change from 2013 to 2014')

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM