如何正确绘制趋势


45

我正在创建一张图表,以显示不同国家的死亡率趋势(每1000人),应该从该图得出的故事是,德国(浅蓝色线)是唯一一个趋势在1932年之后呈上升趋势的国家。我的第一次(基本)尝试

在此处输入图片说明

我认为,该图已经显示了我们想要告诉我们的内容,但是它不是超级直观。您是否有任何建议可以使趋势之间的区别更加清晰?我当时在考虑绘制增长率,但我尝试了,但并没有更好。

数据如下

year     de     fr      be       nl     den      ch     aut     cz       pl
1927    10.9    16.5    13      10.2    11.6    12.4    15      16      17.3
1928    11.2    16.4    12.8    9.6     11      12      14.5    15.1    16.4
1929    11.4    17.9    14.4    10.7    11.2    12.5    14.6    15.5    16.7
1930    10.4    15.6    12.8    9.1     10.8    11.6    13.5    14.2    15.6
1931    10.4    16.2    12.7    9.6     11.4    12.1    14      14.4    15.5
1932    10.2    15.8    12.7    9       11      12.2    13.9    14.1    15
1933    10.8    15.8    12.7    8.8     10.6    11.4    13.2    13.7    14.2
1934    10.6    15.1    11.7    8.4     10.4    11.3    12.7    13.2    14.4
1935    11.4    15.7    12.3    8.7     11.1    12.1    13.7    13.5    14
1936    11.7    15.3    12.2    8.7     11      11.4    13.2    13.3    14.2
1937    11.5    15      12.5    8.8     10.8    11.3    13.3    13.3    14

2
比较而言,来自意大利和西班牙的数据会很有趣。大约在那个时候,他们还有政府主义政府。
asmaier

1
除了答案中给出的好主意外,请确保从0(y轴)开始绘制,以使相对变化幅度更明显。
WoJ

2
@WoJ我明白您的意思,但实际上,范围是每1000约9到18,因此将花一半的图形空间来显示死亡率不是零。我认为这就是到目前为止,大多数人(包括我自己)都不愿意这样做的原因。考虑一下您的标准在哪里停止,例如,您是否坚持认为成年人身高的历史变化图都从零开始?在如更多的讨论stats.stackexchange.com/questions/184525/...
尼克·考克斯

1
首先,我不考虑图形,而是想知道数据和分析的基础是什么。死亡率与哪些因素有关?如果死亡率已经很高(例如波兰),死亡率会降低得更快吗?死亡率是否稳定在某个水平?这种平稳效应(对德国更强)是否可能使奥地利(近几年来)的增长更强?该图是原始数据的一种(仍然需要分析),并且在导出时(数字不是简单的度量而是在导出),这使得突出显示1效果很困难。
Sextus Empiricus

1
另外,最好显示比10年更长的时间。仅当您展示周围环境时,对这十年的关注才是公平的。看到特写镜头在更广阔的视野中显得毫无意义,这很常见。当这些曲线像暴风雨中的波浪一样上下波动时,您就必须展示整个海洋,而不仅仅是与一个好故事相关的单个波浪。(我敢肯定,Tufte的例子表明了这一原理)
Sextus Empiricus

Answers:


53

有时少即是多。不用逐年变化和国家/地区区分的细节,您可以提供有关趋势的更多信息。由于其他国家/地区大多一起移动,因此您可以在没有其他颜色的情况下过关。

使用平滑器时,您需要读者相信自己没有对任何有趣的变化进行平滑。

在此处输入图片说明

在收到几个代码请求后更新

我在JMP的交互式Graph Builder中做到了这一点。JMP脚本是:

Graph Builder(
Size( 528, 456 ), Show Control Panel( 0 ), Show Legend( 0 ),
// variable role assignments:
Variables( X( :year ), Y( :Deaths ), Overlay( :Country ) ),
// spline smoother:
Elements( Smoother( X, Y, Legend( 3 ) ) ),
// customizations:
SendToReport(
    // x scale, leaving room for annotations
    Dispatch( {},"year",ScaleBox,
        {Min( 1926.5 ), Max( 1937.9 ), Inc( 2 ), Minor Ticks( 1 )}
    ),
    // customize colors and DE line width
    Dispatch( {}, "400", ScaleBox, {Legend Model( 3,
        Properties( 0, {Line Color( "gray" )}, Item ID( "aut", 1 ) ),
        Properties( 1, {Line Color( "gray" )}, Item ID( "be", 1 ) ),
        Properties( 2, {Line Color( "gray" )}, Item ID( "ch", 1 ) ),
        Properties( 3, {Line Color( "gray" )}, Item ID( "cz", 1 ) ),
        Properties( 4, {Line Color( "gray" )}, Item ID( "den", 1 ) ),
        Properties( 5, {Line Color( "gray" )}, Item ID( "fr", 1 ) ),
        Properties( 6, {Line Color( "gray" )}, Item ID( "nl", 1 ) ),
        Properties( 7, {Line Color( "gray" )}, Item ID( "pl", 1 ) ),
        Properties( 8, {Line Color("dark red"), Line Width( 3 )}, Item ID( "de", 1 ))
    )}),
    // add line annotations (omitted)

));


4
以我的经验,平滑系列是社会科学中非常罕见的实践。
luchonacho

6
也许这就是向他们展示新颖有用的东西的原因吗?
kjetil b halvorsen

9
不管社会科学中的规范如何,我发现平滑化处理掩盖了1930年发生的下降和1935年发生的上升。1929年在多个国家出现的上升也被掩盖了。否则,我非常喜欢这种简单的方法。
Underminer

7
+1仅使用两种颜色(也许会使灰色更浅吗?),并通过在右边放置国家/地区名称来避免出现图例。-1表示平滑,无缘无故地丢弃信息。所以我不需要实际投票;-)
S. Kolassa-恢复莫妮卡

10
@StephanKolassa我觉得XAN的观点是有一个很好的理由要放弃信息:专注于整体趋势,而不是年际变“噪音”。在某种程度上,您已经在“丢弃信息”-您正在查看年度数字。我怀疑通过绘制每日费率可以改善该图,这是“不要丢弃信息” 带给您的,荒唐的。-确实,某些趋势被平滑处理所遮盖,但其他趋势(如季节性变化)则被年利率的选择所遮盖。涉及到的一些信任关系仍在显示相关的变化。
RM

39

这里有很好的答案。让我随您的便,你想表明德国的趋势与其他国家不同。 水平与变化是经济学中的常见区别。您的数据是按级别划分的,但是您提出的问题是在寻求更改。做到这一点的方法是将参考水平(此处为1932)设置为。从那里开始,每个连续的一年都是前一年的一小部分。(通常采用对数来使更改更加稳定和对称。这确实在一定程度上改变了确切数字的含义,如果您确实希望某人从图表中获取该数字,但是通常对于这种情况,人们希望能够看到模式。)然后,您将获得每个系列的运行总和并将其乘以100 1001100按照惯例。那就是你的情节。您的案例不太常见,因为您的参考点位于系列的中间,因此我从1932年开始在两个方向上都使用它。下面是一个用R编码的简单示例(有很多方法可以编写代码,绘制得更好,但这应该可以直接说明这个想法)。我将德国的线加粗以在图例中加以区分,并在处添加了参考线。很容易看出德国在其他国家中脱颖而出。您还可以看到,所有其他国家/地区在1937年的汇率最终都低于1932年,并且它们逐年的变化在1932年之后的几年中的波动幅度远小于在此之前的年份。 100

d = read.table(text="
year     de     fr      be       nl     den      ch     aut     cz       pl
1927    10.9    16.5    13      10.2    11.6    12.4    15      16      17.3
...
1937    11.5    15      12.5    8.8     10.8    11.3    13.3    13.3    14",
header=T)

d2          = d  # we'll end up needing both
d2[6,2:10]  = 1  # set 1932 as 1
for(j in 2:10){   
  for(i in 7:11){
      # changes moving forward from 1932:
    d2[i,j] = log( d[i,j]/d[i-1,j] )
      # running sum moving forward from 1932:
    d2[i,j] = d2[i,j]+d2[i-1,j]
  }
  for(i in 5:1){
      # changes moving backward from 1932:
    d2[i,j] = log( d[i,j]/d[i+1,j] )
      # running sum moving forward from 1932:
    d2[i,j] = d2[i+1,j]+d2[i,j]
  }
}
d2[,2:10]   = d2[,2:10]*100  # multiply all values by 100

windows()  # plot of changes
  plot(1,1, xlim=c(1927,1937), ylim=c(82,118), xlab="Year", 
       ylab="Change from 1932", main="European death rates")
  abline(h=100, col="lightgray")
  for(j in 2:10){
    lines(1927:1937, d2[,j], col=rainbow(9)[j-1], lwd=ifelse(j==2,2,1))
  }
  legend("bottomleft", legend=colnames(d2)[2:10], lwd=c(2,rep(1,8)), lty=1, 
         col=rainbow(9), ncol=2)

windows()  # plot of levels
  plot(1,1, xlim=c(1927,1937), ylim=c(8,18.4), xlab="Year", 
       ylab="Deaths per thousand", main="European death rates")
  abline(h=d[6,2:10], col="gray90")
  points(rep(1932,9), d[6,2:10], col=rainbow(9), pch=16)
  for(j in 2:10){
    lines(1927:1937, d[,j], col=rainbow(9)[j-1], lwd=ifelse(j==2,2,1))
  }
  legend("topright", legend=colnames(d)[2:10], lwd=c(2,rep(1,8)), lty=1, 
         col=rainbow(9), ncol=2)

在此处输入图片说明

相比之下,下面是数据在级别中的对应图。尽管如此,我还是试图让人们看到1932年以后德国会以两种方式上升:我在19​​32年的每个系列中都突出了一个要点,并在背景下以该水平绘制了暗淡的灰色线。

在此处输入图片说明


+1非常好的解决方案
Repmat

2
有足够的空间来丢失图例(杀死键)并直接在图形的主体内标记每个曲线。
Nick Cox

3
有很多方法可以使代码和图更好。我的主要目的是区分级别和变更的概念,并提供如何可视化变更的基本演示。
gung-恢复莫妮卡

17

在其他答案中,这里有很多好主意,但是它们并没有穷尽所有可能的好方法。该答案的第一张图认为可以分别讨论和解释不同的死亡率水平。在允许每个系列填充大部分可用空间时,它将读者的注意力集中在相对变化的模式上。

按国家/地区的字母顺序通常是默认的,因此在此处未坚持。幸运的是,幸运的是,德国(de)位于这个3 x 3显示器的中心。一个简单的叙述-看!自1932年以来的好转,德国的模式就格外出色-成为可能且合理。

在此处输入图片说明

幸运的是,但幸运的是,有9个国家足以证明尝试单独的面板是合理的,但没有太多的国家可以使该设计不可行(假设有30个面板,当然还有300个面板,那么(将会)有太多的面板需要扫描,每个面板都太小而无法扫描)。仔细检查)。

显然,这里有足够的空间容纳更完整的国家/地区名称。(在其他一些答案中,图例会占用可用空间的很大一部分,但仍然有点神秘。实际上,对此类数据感兴趣的人会发现该国家的缩写易于解码,但通常需要多大的图例图形设计中令人烦恼的问题。)

记录的Stata代码:

clear
input int year double(de fr be nl den ch aut cz pl)
1927 10.9 16.5   13 10.2 11.6 12.4   15   16 17.3
1928 11.2 16.4 12.8  9.6   11   12 14.5 15.1 16.4
1929 11.4 17.9 14.4 10.7 11.2 12.5 14.6 15.5 16.7
1930 10.4 15.6 12.8  9.1 10.8 11.6 13.5 14.2 15.6
1931 10.4 16.2 12.7  9.6 11.4 12.1   14 14.4 15.5
1932 10.2 15.8 12.7    9   11 12.2 13.9 14.1   15
1933 10.8 15.8 12.7  8.8 10.6 11.4 13.2 13.7 14.2
1934 10.6 15.1 11.7  8.4 10.4 11.3 12.7 13.2 14.4
1935 11.4 15.7 12.3  8.7 11.1 12.1 13.7 13.5   14
1936 11.7 15.3 12.2  8.7   11 11.4 13.2 13.3 14.2
1937 11.5   15 12.5  8.8 10.8 11.3 13.3 13.3   14
end

rename (de-pl) (death=)
reshape long death, i(year) j(country) string
set scheme s1color 
line death year, by(country, yrescale note("")) xtitle("") xla(1927(5)1937)

编辑:

蒂姆·莫里斯(Tim Morris)建议对图表进行简单的增强,以突出显示出现最大值的年份:

在此处输入图片说明

egen max = max(death) , by(country)
replace max = max == death
twoway line death year || scatter death year if max, ms(O)  ///
by(country, yrescale note("") legend(off)) xtitle("") xla(1927(5)1937)  

编辑2(修改为显示更简单的代码):

或者,此下一个设计分别显示每个系列,但每次显示另一个系列为背景。在此相关主题中讨论了总体思路。

在此处输入图片说明

这里既有损失,也有收获。尽管每个系列都可以在其他上下文中更轻松地看到,但是重复却会浪费空间。

记录的Stata代码:

(代码到inputreshaperename如以上在此答案)

* type "ssc inst fabplot" to install
fabplot line death year, by(country, compact note("countries highlighted in turn")) ///
ytitle("death rate, yearly deaths per 1000") yla(8(2)18, ang(h)) ///
xla(1927(5)1937, format(%tyY)) xtitle("") front(connected) 

fabplot可以理解为ront fforeground and backdrop或background图,而不是1960年代s 语“神话般”的回声。


3
我必须说,+ 1非常简洁,可以生成类似这样的图形。
gung-恢复莫妮卡

@gung谢谢。StataCorp应该得到这里的任何好评,因为它们是内置命令。美容我换台了一些默认的文本,比如yearX轴标题(谁需要吗?)。我将添加到Stata用户中,自然数据结构将不是a renamereshape。但是具有不同的面板(在这里是国家)作为不同的观察块。
尼克·考克斯

+1但是,该解决方案的一个有问题的特征是它失去了背景:我们无法轻易看到,尽管德国的死亡率有所提高,但它的起步水平较低,但到最后仍然(相对)不是很高。
whuber

1
EDIT 2中的替代设计是解决@whuber关于上下文提出的关键点的一种方法。
Nick Cox

15

您的图表是合理的,但需要进行一些改进,包括标题,轴标签和完整的国家/地区标签。如果您的目标是强调德国是唯一在观察期内死亡率上升的国家,那么一种简单的方法是在图中突出显示此线,方法是使用更粗的线线型或Alpha透明度。您还可以使用条形图来扩大时间序列图,该条形图显示死亡率随时间的变化,从而使时间序列线的复杂性降低为单一变化度量。

这是使用ggplotin 生成这些图的方法R

library(tidyr);
library(dplyr);
library(ggplot2);

#Create data frame in wide format
DATA_WIDE <- data.frame(Year = 1927L:1937L,
                        DE   = c(10.9, 11.2, 11.4, 10.4, 10.4, 10.2, 10.8, 10.6, 11.4, 11.7, 11.5),
                        FR   = c(16.5, 16.4, 17.9, 15.6, 16.2, 15.8, 15.8, 15.1, 15.7, 15.3, 15.0),
                        BE   = c(13.0, 12.8, 14.4, 12.8, 12.7, 12.7, 12.7, 11.7, 12.3, 12.2, 12.5),
                        NL   = c(10.2,  9.6, 10.7,  9.1,  9.6,  9.0,  8.8,  8.4,  8.7,  8.7,  8.8),
                        DEN  = c(11.6, 11.0, 11.2, 10.8, 11.4, 11.0, 10.6, 10.4, 11.1, 11.0, 10.8),
                        CH   = c(12.4, 12.0, 12.5, 11.6, 12.1, 12.2, 11.4, 11.3, 12.1, 11.4, 11.3),
                        AUT  = c(15.0, 14.5, 14.6, 13.5, 14.0, 13.9, 13.2, 12.7, 13.7, 13.2, 13.3),
                        CZ   = c(16.0, 15.1, 15.5, 14.2, 14.4, 14.1, 13.7, 13.3, 13.5, 13.3, 13.3),
                        PL   = c(17.3, 16.4, 16.7, 15.6, 15.5, 15.0, 14.2, 14.4, 14.0, 14.2, 14.0));

#Convert data to long format
DATA_LONG <- DATA_WIDE %>% gather(Country, Measurement, DE:PL);

#Set line-types and sizes for plot
#Germany (DE) is the fifth country in the plot
LINETYPE <- c("dashed", "dashed", "dashed", "dashed", "solid", "dashed", "dashed", "dashed", "dashed");
SIZE     <- c(1, 1, 1, 1, 2, 1, 1, 1, 1);

#Create time-series plot
theme_set(theme_bw());
PLOT1 <- ggplot(DATA_LONG, aes(x = Year, y = Measurement, colour = Country)) + 
         geom_line(aes(size = Country, linetype = Country)) +
         scale_size_manual(values = SIZE) +
         scale_linetype_manual(values = LINETYPE) +
         scale_x_continuous(breaks = 1927:1937) +
         scale_y_continuous(limits = c(0, 20)) +
         labs(title = "Annual Time Series Plot: Death Rates over Time", 
              subtitle = "Only Germany (DE) trends upward from 1927-37") +
         xlab("Year") + ylab("Crude Death Rate\n(per 1,000 population)");


#Create new data frame for differences
DATA_DIFF <- data.frame(Country = c("DE", "FR", "BE", "NL", "DEN", "CH", "AUT", "CZ", "PL"),
                        Change  = as.numeric(DATA_WIDE[11, 2:10] - DATA_WIDE[1, 2:10]));

#Create bar plot
PLOT2 <- ggplot(DATA_DIFF, aes(x = reorder(Country, - Change), y = Change, colour = Country, fill = Country)) + 
         geom_bar(stat = "identity") +
         labs(title = "Bar  Plot: Change in Death Rates from 1927-37", 
              subtitle = "Only Germany (DE) shows an increase in death rate") +
         xlab(NULL) + ylab("Change in crude Death Rate\n(per 1,000 population)");

这导致以下情况:

在此处输入图片说明 在此处输入图片说明

注意:我知道OP旨在强调自1932年德国趋势开始上升以来的死亡率变化。在我看来,这有点像采摘樱桃,当选择时间间隔以获得特定趋势时,我发现这是可疑的。因此,我查看了整个数据范围内的间隔,这与OP的比较有所不同。


感谢您的建议。该格式正在进行中,这只是我想要得到的一个粗略示例;)
PhDing

1
@Graipher:很好(+1)-多一点时间我会编辑。
恢复莫妮卡

1
我喜欢条形图,但不是按字母顺序的x轴,而是按更改排序。
格雷戈尔(Gregor)2018年

14

尽管声明的目标是显示更改,但显然您也希望按国家显示年度时间序列。这表明不完全重做图形,而只是对其进行了修改。

由于更改涉及从一年到下一年发生的变化,因此您可以考虑使用跨越连续年份的图形符号来表示更改:即,连接图中数据点的线段

由于颜色对于区分国家非常有用,否则就不能很好地指示定量变量,因此从本质上讲,我们只剩下两个可以改变以指示变化的特征:分段的样式和厚度。由于您的论文涉及积极的变化,因此您需要使增加的线段更加突出:它们的样式应该更连续,并且应该更粗。

最后,您的论文涉及1932年以后的数据。我们将要强调图形中相对于其他元素的那些元素。可以通过使颜色饱和来完成。

情节

此解决方案立即提供了原始文档中不明显的见解:

  • 在1932年之后的所有年份中,没有一个国家的死亡率每年都在增加。 任何一个这样的国家都将显示为连续的实线,但是没有这样的线。

  • 许多变化应归因于所有国家共同的因素。 这在垂直列中线条样式和粗细的相似性中显而易见。例如,在1934-35年期间,几乎所有国家的死亡率都在上升,而在1933-34年期间,几乎所有国家的死亡率都在下降。

  • 德国的死亡率在1932-33年间大幅上升,而在1935-36年间略有上升,这是不寻常的

这些建议建议对死亡率相对于国家的变化进行稳健的双向探索,也许采用中位数波兰法,以便更深入地了解这一时期欧洲国家的相对绩效。

如果您只想强调1937年和1932年之间的差异,可以使用类似的技术来象征那些日期之间路径的各个部分。德国将脱颖而出:

剧情2


10

坡度图

表示数据的一种方法是使用坡度图,它特别适合比较变化或渐变(某些链接:1 2

下边是

  • 左侧的坡度图示例显示了这种情况下您的情况。

  • 在中心,一个更复杂的坡度图也显示了1932年

  • 右侧是坡度图的变化形式,更多是一种迷你图,其中显示了所有数据(表示没有直线)。

我不确定哪一个最好。第三个/右选项提供了关于逐年变化的更强思路(例如,丹麦和德国的外观看起来并没有太大不同,并且逐年上升和下降的幅度越来越明显),但是可以也会分散注意力(尤其是1929年的峰值)。因此,哪个更好取决于您想用图表传达的内容以及您的故事需要多少细节(例如,在不同的政府的支持下,1932年的转折在第二种/中间的选择中更为明显)。

右边坡度图的变化看起来很像Xan的图。但是,除了风格上的差异外,还有另一个重要的差异。选择图形的宽度和高度,以使曲线的角度接近45度。这样,差异就更加明显(我相信最好的例子是Edward Tufte的黑子例子

斜率图和变化

更多背景

如果您想增加比简单坡度图更多的复杂性,那么我认为,在1927-1937范围之外显示更多数据比在范围内显示更多数据实际上更好。(例如,Tufte在“定量信息的视觉显示”中第74-75页中的示例,您可以通过其网站公告板上的此页面进行访问)

下面的示例显示了从Wikipedia(例如,捷克共和国的页面)以及瑞士和荷兰的国家统计局(bfsStatline)中提取的1900-2000年的数据(不包括波兰,该数据有点困难)。

(数据与您的数据略有不同,但是与JörgBaten和Andrea Wagner撰写的文章“专制,市场瓦解和健康:1933-1937年纳粹德国的死亡率和营养危机”相同。这篇文章很有趣。可以读取数据,因为它们提供的数据不只是粗略的死亡率,尽管它们还限制了一个很小的时期,尤其有趣的是,从1932年到1937年,死亡率的上升主要存在于从法兰克福到不来梅的一个城市中和汉堡)

更多背景

我认为该图表非常重要,因为它表明德国在1932年之后的升值之前出现了非常强劲的下跌。比其他国家都强。因此,您可以有正面和负面的解释。在1932-1937年间,德国的死亡率上升速度超过其他国家,但这是(1)从低峰上升还是(2)向高峰上升?在这方面一个有趣的方面是,1932年的10.8水平对于德国来说是一个非常低的水平(此时,只有荷兰的死亡率较低)。这不仅是直到1937年的最低水平,而且直到1995年才再次达到10.8的水平。

与健康有关的另一点(如果您的情况如此),比较预期寿命可能会更好,人口的人口组成对死亡率有影响,而与健康状况的变化无关

较少的其他上下文

上面的图表显示了总数,但是对于大多数目的而言可能是一个过大的选择(在本帖子中,我想显示整个历史,但更多是出于探索目的)。下图是我认为仍然不错的替代方案。

较小的上下文图


感谢您的所有建议。我认为您提供的坡度图非常直观。我确信,包括更长的时间跨度将是有用的,但是我们要着重指出这一特定时期并使其明确。我认为1900-2000年的阴谋会有些混乱。关于您的最后一点,我们调整了粗略汇率的年龄,以继续使用死亡率。
PhDing

1
@Alessandro我添加了一个更实用的替代方法。同样,这些数字是不同的,因为我使用了不同的来源(未调整年龄),但是我猜想德国的强劲下滑与强劲的崛起可能是相同的。
Sextus Empiricus

4

取决于听众,但我会简化一下事情:

在此处输入图片说明

然后将其拼写在标题中,例如

从1932-37年,德国的年死亡率上升,而整个中欧(法国,比利时,荷兰,丹麦,奥地利,捷克共和国,波兰)的年死亡率总体下降。

(顺便说一句,ch vs. cz是什么,即我在上面错过哪个国家?)

death rate确切地说,在将“其他”项“合并”时,您当然需要根据人口估计值对权重进行加权,但是我确信此信息随时可供您使用。

更新6/9/18:当然,这是一个“玩具”草图,并非来自数据。想法是提供图形应采用的形式的粗略草稿。

为了解决胡伯尔的评论:可以将“其他”的值作为平均值生成,并按人口加权,例如表示每年值,而作为“其他”中个国家的:OyOi=1...88×

Oyi=i=8i=1ADRyi.populationitotalPopulation

或更好,如果您有人口信息。每年:

Oyi=i=8i=1ADRyi.populationyitotalPopulationy

视读者群体(例如流行病学家还是历史学家)而定,标准偏差或标准错误可能会添加到后者中,尽管我认为这会破坏情节的简单外观。


5
ch是瑞士。(顺便说一句,在30年代还不是捷克共和国。)—我不喜欢您的方法,因为不清楚其他国家的下降趋势是否一致。看起来好像只是随机波动,在其他国家平均为负,而在德国则为正。
大约

我喜欢这个答案,但是我可能会在“其他”线附近添加范围或标准偏差的可视化图像,否则可能会造成欺骗。
Tasos Papastylianou

2
我非常喜欢这个主意-但能否请您解释一下如何确定“其他人”的死亡率?由于其所代表的人群千差万别,因此以算术方式表示费率是不合适的。
ub

3

如果您想突出显示更改,则可以计算并显示。使用热图显示更改可能很有用,因为它可以进行比较而不会产生过度绘制问题,并避免了折线图可能产生的插值问题。

dR中一样使用数据:

library(tidyverse)
d2 <- data.frame(apply(d[-1],2,diff))
d2$year <- d$year[-1]
d2 %>% gather(key="country",value=deathrate,-year) %>% 
   ggplot(aes(x=factor(year),y=country,fill=deathrate)) + 
   geom_tile() + 
   scale_fill_gradient2("\u0394 deathrate")

死亡率热图

请注意,现在的数据与上一年有所不同。您可以看到,德国在1932年之后出现了其他国家所不具备的忧郁症(死亡率上升)现象。您还可以看到,在1934年至1935年之间,除波兰外,所有国家的死亡率都有所上升,但是德国的趋势逆转似乎是1932-1933和1935-1936(以及1927-1928年)。

一个有趣的特征是,与右侧相比,左侧的颜色更浓。这意味着,变化的幅度在该阶段开始时较高,而在结束时则更加柔和。

我建议将其与显示电平的线图配对。


2

在这里,我向您显示每1000居民中死亡率的对数与上一年的差异(因此未显示1927)。德国以红色显示,而其他国家/地区的平均值则以黑色粗线显示。

在此处输入图片说明

德国在10年中有5年的比例有所增加。1932年以后,直到1937年,它的发言权都超过了其他国家/地区的平均水平(而且大多是正面的)。

虽然为什么是对数?原因很简单:从2更改为1比从1000更改为999更加剧烈:)


码:

x = read.table("clipboard", header = TRUE, dec = ".")
xl = log(x[-1])
xd = apply(xl, 2L, diff)

png("CVquestion.png")
plot(0,0, xlim = range(x[-1,1]), ylim = range(xd), type = "n", ylab = "", main = "Difference of the log(death rate per 1000 inhab.)", xlab = "year")
grid()
for (i in rev(seq(ncol(xl)))) lines(x[-1,1], xd[,i], type = "o", col = adjustcolor(ifelse(i == 1, 2, 1), 0.7), lwd = ifelse(i == 1, 2, 1), lty = ifelse(i == 1, 1, 2), pch = ifelse(i == 1,16,NA))
lines(x[-1,1], rowMeans(xd[,-1]), type = "o", col = adjustcolor(1, 0.7), lwd = 2, lty = 1, pch = 16)

text(x = 1937, y = rev(xd[10,]), label = rev(colnames(xd)), col = rev(c(2, rep(1,8))))
dev.off()

2
OP谈论的是死亡率,而不是谋杀率
Kjetil B halvorsen

@kjetilbhalvorsen糟糕,这是您从上午8点开始在每天工作的晚上9点尝试数据可视化时发生的事情。将尽快修复,感谢您的注意:)
Firebug

1

另一种版本:比率(1927年至当年的平均死亡率)/(1927年的死亡率)

在此处输入图片说明

用Mathematica代码完成

data = {
 {year,   de,   fr,   be,   nl,  den,   ch,  aut,   cz,   pl},
 {1927, 10.9, 16.5, 13.0, 10.2, 11.6, 12.4, 15.0, 16.0, 17.3},
 {1928, 11.2, 16.4, 12.8,  9.6, 11.0, 12.0, 14.5, 15.1, 16.4},
 {1929, 11.4, 17.9, 14.4, 10.7, 11.2, 12.5, 14.6, 15.5, 16.7},
 {1930, 10.4, 15.6, 12.8,  9.1, 10.8, 11.6, 13.5, 14.2, 15.6},
 {1931, 10.4, 16.2, 12.7,  9.6, 11.4, 12.1, 14.0, 14.4, 15.5},
 {1932, 10.2, 15.8, 12.7,  9.0, 11.0, 12.2, 13.9, 14.1, 15.0},
 {1933, 10.8, 15.8, 12.7,  8.8, 10.6, 11.4, 13.2, 13.7, 14.2},
 {1934, 10.6, 15.1, 11.7,  8.4, 10.4, 11.3, 12.7, 13.2, 14.4},
 {1935, 11.4, 15.7, 12.3,  8.7, 11.1, 12.1, 13.7, 13.5, 14.0},
 {1936, 11.7, 15.3, 12.2,  8.7, 11.0, 11.4, 13.2, 13.3, 14.2},
 {1937, 11.5, 15.0, 12.5,  8.8, 10.8, 11.3, 13.3, 13.3, 14.0}
}

ListPlot[
 Map[
  Table[{First[data[[k + 1]]], Mean[Take[#, k]]/First[#]}, {k, Length[#]}] &,
  Map[Rest, Rest[Transpose[data]]]
 ],
 Joined -> True,
 PlotRange -> All,
 Frame -> True,
 FrameTicks -> {Map[First, Rest[data]], Automatic},
 PlotLabels -> Rest[First[data]],
 AxesOrigin -> {First[First[Rest[data]]], 1} 
]

(1929年的峰值似乎与当时发生的流感大流行有关)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.