在图形上显示三条信息


15

注意:现在已附加50点原始数据。

我想显示我已经完成了多少研究,一周中完成了多少页,并按天细分,并且如下所示:在此处输入图片说明

我曾有人告诉我他们不懂这些图,但是我不知道该如何显示它们。因为我本质上需要三个维度而无需进行累积描述。我要避免使用大量折线图,因为几周后这些图将变得难以辨认。我无能为力吗?

如何更清楚地显示这些内容?

Date        Total   Total pages
21/11/2014  2.4166   0
22/11/2014  0        0
23/11/2014  1.5833   4
24/11/2014  3.0166  13
25/11/2014  2.4999   6
26/11/2014  1.4833   3
27/11/2014  3.0499   6
28/11/2014  0        0
29/11/2014  2.4499   5
30/11/2014  2.8833   2
 1/12/2014  0        0
 2/12/2014  4.1166   8
 3/12/2014  1.3333   5
 4/12/2014  1.2499   3
 5/12/2014  1.6666   8
 6/12/2014  0        0
 7/12/2014  2.4833   9
29/12/2014  0        0
30/12/2014  1.2332   1
31/12/2014  0.3333   0
 1/01/2015  3.5666   2
 2/01/2015  0.8166   0
 3/01/2015  2.75    28
 4/01/2015  0.4166   0
 5/01/2015  1.2833   0
 6/01/2015  0.3333   3
 7/01/2015  0        0
 8/01/2015  0        0
 9/01/2015  2.35     2
10/01/2015  0.5666   0
11/01/2015  0        0
12/01/2015  1.6666   0
13/01/2015  2.2666   5
14/01/2015  2.5165   6
15/01/2015  2.0166   0
16/01/2015  2.9666   1
17/01/2015  0.8333   0
18/01/2015  0.6666   1
19/01/2015  1.45     0
20/01/2015  0.3166   0
21/01/2015  0        0
22/01/2015  0.2333   0
23/01/2015  0.85     2
24/01/2015  0        0
25/01/2015  0        0
26/01/2015  0.6666   4
27/01/2015  0.8333   1
28/01/2015  1.5498   5
29/01/2015  6.4159   9
30/01/2015  2.9166   0

如果您可以发布样本数据,那么感兴趣的人可以玩一下并向他们展示解决方案。现实地说,这将需要数周的时间,因为问题的实质是随着周数的增加会发生什么。
尼克·考克斯

@NickCox我可以在几周后重新发布,因为我真的不确定数据将如何更改,并且到目前为止,我只经历了数据的前13天(其中3天没有研究)

@NickCox我如何发布原始数据?

1
我的建议是稍等。通过更新问题,您已引起注意。看看您是否获得新的答案。
尼克·考克斯

1
您要显示有关这些数据的什么内容?您想讲什么故事?您正试图通过条形图使人们了解您的数据吗?
gung-恢复莫妮卡

Answers:


7

可视化基于日期/日历的数据的一种方法是通过矩阵显示器以彩色对数据进行编码。安排矩阵(或表),以便行代表星期,列代表天。如果需要,您可以为每周总计添加最后一列。

如果数据排列正确,则可以使用条件格式在Excel中简单地实现。特别是,您可以使用查找原始数据的公式来构建值的“网格”。从那里,您可以使用条件格式来显示结果。

结果如下所示。抱歉,我更改了日期格式。H1单元格中的公式为:"=IFERROR(VLOOKUP($G$1+$G6*7+H$5, $B$5:$C$16,2,FALSE), 0)"。它正在做一些数学运算以使日期正确。希望它很简单。

具有矩阵排列的条件格式的图像

如果您真的想突破极限,可以使用d3及其日历等框架插件来显示此数据。不过,这可能比其价值更大。

这种格式与GitHub在一段时间内显示用户活动/贡献的方式非常相似。这是一个用户的用户(不是我!)。 在此处输入图片说明


2
(+1)我喜欢这种方法,特别是因为它非常适合在与输入数据相同的电子表格中使用。该图形显示实际上是热图。我经常自己使用类似的设置,但我发现一个缺点是趋势方面很难发现,因此最好用一些折线图来补充,以显示更详细的信息(Peter Flom,Nick Cox我都提出了很好的建议)。
Silverfish 2014年

6

原始的突出特点是每周总和。仅当您了解颜色后,各个值才有意义。我想这是该图不适用于新观众的重要原因。与此相关的是,时间的时间方面丢失了。一组连续的颜色可能帮助(例如,7种色调蓝色)。

我通常不在乎标记每个项目-确切的值重要吗?如果您无法在没有标注每个值的情况下对其进行解释,则该图将无法正常工作。

继续尝试。考虑到每周总和的明显重要性,我绘制了每周累积总和。它按时间顺序显示每周总和和天数。确切的日期值不太清楚,但离群值仍然会突出。

对于这类小线条图(可以减小为迷你图大小),拥有参考线或参考面积会很有帮助。为了说明,我添加了一个目标范围。如果目标不适合,则参考可能是过去三周的范围或某个固定参考值。

在此处输入图片说明

我用红色表示快速扫描未达到目标的几周。

再过几周,您可能会将它们组织成一个网格而不是一个垂直列表。

在此处输入图片说明


我认为这很棒。是否有一种有效的方法来结合学习时间和涵盖的页面信息,这(至少给我留下了深刻的印象)似乎是练习的主要目标之一?我怀疑在第一个图形中背对背具有“学习时间”和“页面完成”是相当有效的(即,学习时间在年周的左列中绘制,而页面在年周的右列中完成) )。但是我不确定在第二张图中是否能很好地工作。
Silverfish

显然,一种解决方案是在研究的页面上用辅助垂直轴对两个系列进行绘图,但是很多人对此表示强烈反对,例如,Hadley Wickham故意拒绝在ggplot中实现它。我通常会避免这样做,但是如果两者都有目标,这可能很有意义-这将为辅助y轴引入自然比例,以确保小时和页面的目标区域整齐地对齐。该缩放决策通常是具有多个y轴的有争议的问题。
银鱼

谢谢@Silverfish!我也不赞成在一张图中使用两个比例尺,但是正如您所说,如果两个比例尺可以相对于各自的目标以相同的比例尺放置,则可能会起作用。我应该在回答中明确地说过,通过仅显示一个度量,我假设另一种度量将以相同的方式显示,但在单独的图中。在垂直列表形式中,每个度量可以是图形的单独列。
xan 2015年

这是另一个很好的答案。我绝对喜欢您已应用的目标构想。查看所有答案后,我将不得不看看我现在正在做什么。谢谢

5

如果我对您的理解正确,则不想使用折线图的原因是您有太多的星期,并且这些图会变得凌乱。

如果这是问题所在,则可以将时间序列分为多个部分:

每日变化

每周变化

长期趋势

还要别的吗。

威廉·S·克利夫兰(William S.Cleveland)在他的一本书中展示了一个很好的例子(我不在办公室,不记得他的哪本书中有这个例子,但它要么是可视化数据,要么是图形数据的元素)。

R和SAS都有执行此操作的工具。您可以访问其中任何一个吗?


我的计算机上装有R,但很少使用。(完全愿意学习)

好吧,它确实具有学习曲线,但要注意decompose()函数。您可能需要做一些游戏才能得到想要的东西。另外,如果您能找到克利夫兰的书,那就太好了。
彼得·弗洛姆

3
这是R文档中Peter提到的Cleveland示例。如果安装了R,我可以运行示例:stat.ethz.ch/R-manual/R-devel/library/stats/html/stl.html
Kieran

@Kieran正确的输出?imgur.com/IzRC0h8

5

首先,我将对您原始的堆叠或划分的条形图提出一些反对意见。

一种。颜色编码看起来完全是任意的。因此,如果不在图例和图形之间反复往返,就无法研究图形。

b。零是隐式的,如不可见的条形段。零是变化的一部分。

由于这些和其他原因,图形难以解码。

就是说,如果感兴趣的主要是研究每周之间的总计变化,则该图很有用。可以绘制许多周的柱线。相应的缺点是,在几周内研究变化会越来越难。

备份:每个问题中都有三个变量。

  1. 学习时间或页面完成时间。

  2. 星期几。

  3. 周数。

随着星期数的增加,任何图形都将变得更加详细。挑战在于如何控制这些细节。

我会考虑一个循环图(文献中使用了其他名称,但大多数都将其用于查看季节变化)。内奥米·罗宾斯(Naomi Robbins)在这里进行了清晰的介绍。


感谢您提供的非常好的链接。关于您的反对意见,实际上是星期五(星期五)到星期四(从下到上)堆积的日子,但是对于可读性而言,确实缺少某些日子确实是一个值得关注的问题。

确实,但是人们仍然需要使用图例进行解码。
尼克·考克斯

R有一个monthplot命令,实际上可以在每周数据上使用-请参阅stackoverflow.com/questions/5826703/…–
Silverfish

5

如果您采用滚动的7天,14天或28天移动平均线,则线形图可能更易于解释。这样可以使它们平滑,并且仍然可以让您发现趋势。

这与Peter Flom的解决方案有一些相似之处,尽管它比较简单,因此无法提供完整的图像-但这可能足以满足您的需求。如果您在电子表格中记录数据,则具有以下优点:可以通过设置一些公式轻松地在电子表格本身中执行这种平均,并且当您填写新数据时,图形将自动更新。

更新以包括图形

移动平均线形图

七日滚动平均值的电子表格图表虽然不算什么,但似乎可以很好地完成工作-消除了每日变化,因此趋势更易于检测(与等效的每日图表相比,它太吵了,难以理解)。此图很好地把握了一些关键功能:例如,按小时计算,一月中旬完成了大量工作,但是每天平均页面数没有按比例增加。圣诞节假期非常明显,只要清楚地标出各个数据点,就不会产生太大的误导性(如果只是可见线条,就无法确定停滞期是由于缺乏数据!)。不过,我强烈建议,包括1.5

仅使用五十项数据,似乎就不值得尝试在较长的时间内进行平均以检测较长的运行趋势。同样,我怀疑彼得·弗洛姆(Peter Flom)关于季节性分解的出色想法会在如此有限的数据中挣扎。如果要在电子表格中执行分解,则将中断作为零数据包含将更为重要。

要重现我的公式,请将其粘贴以使“日期”位于单元格中A1

Date    Hours   Pages   7-day rolling hours 7-day rolling pages
25/11/14    2.4999  6       
26/11/14    1.4833  3       
27/11/14    3.0499  6       
28/11/14    0   0       
29/11/14    2.4499  5       
30/11/14    2.8833  2       
01/12/14    0   0   =AVERAGE(B2:B8) =AVERAGE(C2:C8)
02/12/14    4.1166  8   =AVERAGE(B3:B9) =AVERAGE(C3:C9)
03/12/14    1.3333  5   =AVERAGE(B4:B10)    =AVERAGE(C4:C10)
04/12/14    1.2499  3   =AVERAGE(B5:B11)    =AVERAGE(C5:C11)
05/12/14    1.6666  8   =AVERAGE(B6:B12)    =AVERAGE(C6:C12)
06/12/14    0   0   =AVERAGE(B7:B13)    =AVERAGE(C7:C13)
07/12/14    2.4833  9   =AVERAGE(B8:B14)    =AVERAGE(C8:C14)
29/12/14    0   0   =AVERAGE(B9:B15)    =AVERAGE(C9:C15)
30/12/14    1.2332  1   =AVERAGE(B10:B16)   =AVERAGE(C10:C16)
31/12/14    0.3333  0   =AVERAGE(B11:B17)   =AVERAGE(C11:C17)
01/01/15    3.5666  2   =AVERAGE(B12:B18)   =AVERAGE(C12:C18)
02/01/15    0.8166  0   =AVERAGE(B13:B19)   =AVERAGE(C13:C19)
03/01/15    2.75    28  =AVERAGE(B14:B20)   =AVERAGE(C14:C20)
04/01/15    0.4166  0   =AVERAGE(B15:B21)   =AVERAGE(C15:C21)
05/01/15    1.2833  0   =AVERAGE(B16:B22)   =AVERAGE(C16:C22)
06/01/15    0.3333  3   =AVERAGE(B17:B23)   =AVERAGE(C17:C23)
07/01/15    0   0   =AVERAGE(B18:B24)   =AVERAGE(C18:C24)
08/01/15    0   0   =AVERAGE(B19:B25)   =AVERAGE(C19:C25)
09/01/15    2.35    2   =AVERAGE(B20:B26)   =AVERAGE(C20:C26)
10/01/15    0.5666  0   =AVERAGE(B21:B27)   =AVERAGE(C21:C27)
11/01/15    0   0   =AVERAGE(B22:B28)   =AVERAGE(C22:C28)
12/01/15    1.6666  0   =AVERAGE(B23:B29)   =AVERAGE(C23:C29)
13/01/15    2.2666  5   =AVERAGE(B24:B30)   =AVERAGE(C24:C30)
14/01/15    2.5165  6   =AVERAGE(B25:B31)   =AVERAGE(C25:C31)
15/01/15    2.0166  0   =AVERAGE(B26:B32)   =AVERAGE(C26:C32)
16/01/15    2.9666  1   =AVERAGE(B27:B33)   =AVERAGE(C27:C33)
17/01/15    0.8333  0   =AVERAGE(B28:B34)   =AVERAGE(C28:C34)
18/01/15    0.6666  1   =AVERAGE(B29:B35)   =AVERAGE(C29:C35)
19/01/15    1.45    0   =AVERAGE(B30:B36)   =AVERAGE(C30:C36)
20/01/15    0.3166  0   =AVERAGE(B31:B37)   =AVERAGE(C31:C37)
21/01/15    0   0   =AVERAGE(B32:B38)   =AVERAGE(C32:C38)
22/01/15    0.2333  0   =AVERAGE(B33:B39)   =AVERAGE(C33:C39)
23/01/15    0.85    2   =AVERAGE(B34:B40)   =AVERAGE(C34:C40)
24/01/15    0   0   =AVERAGE(B35:B41)   =AVERAGE(C35:C41)
25/01/15    0   0   =AVERAGE(B36:B42)   =AVERAGE(C36:C42)
26/01/15    0.6666  4   =AVERAGE(B37:B43)   =AVERAGE(C37:C43)
27/01/15    0.8333  1   =AVERAGE(B38:B44)   =AVERAGE(C38:C44)
28/01/15    1.5498  5   =AVERAGE(B39:B45)   =AVERAGE(C39:C45)
29/01/15    6.4159  9   =AVERAGE(B40:B46)   =AVERAGE(C40:C46)
30/01/15    2.9166  0   =AVERAGE(B41:B47)   =AVERAGE(C41:C47)

5

据我了解您的问题,分开显示小时数和页面数是可行的。我先做 之后,我将在一个图中显示“总计”和“页面”。我猜测实际数字不是最重要的事情-更重要的是要了解工作日和工作日的概观,而工作日和工作日的概观并非如此。在这种情况下,我建议您保留自然的时间结构,因为数据中实际上只有一个时间维度。我们仍然可以找到划定周数的方法。

我使用以下R代码和ggplot2-package生成了第一个图。您的数据已通过以下代码加载到对象数据中。该图是分组的条形图,灰色条形图表示每周的页面总数。

data <- rbind(data.frame(Date = c("17/11/2014", "18/11/2014", "19/11/2014", "20/11/2014"),
                         Total = rep(0, 4),
                         Pages = rep(0, 4)), 
              data,
              data.frame(Date = c("31/01/2015", "01/02/2015"),
                         Total = c(0, 0),
                         Pages = c(0, 0)))

n <- dim(data)[1]

data$Date <- as.Date(data$Date, format = "%d/%m/%Y")
data$weekday <- factor(rep(c("Monday", "Tuesday", "Wednesday", "Thursday",
                             "Friday", "Saturday", "Sunday"), length.out = n))
data$weekday <- factor(data$weekday, levels(data$weekday)[c(2,6,7,5,1,3,4)])
data$week <- factor(rep(seq(from = 0, to = ceiling(((n - 3)/7))), 
                        each = 7, length.out = n))

ggplot(data = data, aes(x = week, y = Pages)) + 
  geom_bar(aes(fill = weekday), stat = "identity", position = "dodge") + 
  labs(fill = NULL) + xlab(NULL) + ylab("Number of pages") + 
  geom_bar(stat = "identity", alpha = 0.2) + theme(panel.background = element_blank()) +
  scale_x_discrete(labels = paste("Week", seq(from = 0, to = 7)))

灰色条的高度表示每周页面总数。

这显然是不完美的。灰色的条形图占主导地位,因为与白色的条形图相比,相同的读数量具有更大的面积。我们可以使它们变薄,但我喜欢它们划定周数的方式。它们很好地指示了同一周中的哪几天-否则不一定可以理解。特别是因为我们的计数为零。

在下一个绘图中,我将平均页数(一周内)用作灰色条的高度。

灰色条的高度指示页面的每周平均值。

这可能代表更好的数据。但是,请注意第0周和第7周具有误导性,因为它们不包括7天。您可以轻松解决此问题。

如果您坚持要同时显示页面和时间,则可以进行背对背条形图绘制。由于两个垂直比例不同,可能会造成混淆。另一方面,比较这样花费的时间和完成的工作可能会很好。

在背对背的情节中组合时间和页面。

编辑:意识到颜色确实并不需要那么多,并且受到xan的启发(请参阅以下评论),您可以将绘图简化为这样。我已标记为星期四,以提供其他视觉指导。您也可以主张对所有条使用相同的颜色,以免过分强调某些(任意)日期。

一个简单的版本。

最后,您还可以尝试通过将值除以平均值来不同地缩放轴。这将使1为“正常”值。我们可以在1处添加一条线来强调这一点-现在在背对背图上完成。就平均工作量而言,这将“好”与“坏”的日子分开了。

在此处输入图片说明

在此图上,我们还可以确保一个单位在两个轴上对应的距离相同,因为它们现在是可比较的。

另请注意,我在第一个版本中弄乱了日子。我已经更正了代码和绘图,现在每周7天去练习。

产生最后一个情节的代码:

data$normPages <- data$Pages/mean(data$Pages)
data$normTotal <- data$Total/mean(data$Total)

data$weekNormPages <- data$Pages/(7*mean(data$Pages))
data$weekNormTotal <- data$Total/(7*mean(data$Total))

pTop <- ggplot(data = data, aes(x = week)) + geom_bar(aes(linetype = weekday, y = normPages), 
                                                      stat = "identity", position = "dodge", 
                                                      fill = "dodgerblue") + labs(fill = NULL) +
  xlab(NULL) + ylab("Number of pages") + geom_bar(aes(y = weekNormPages), stat = "identity", alpha = 0.3) + 
  theme(panel.background = element_blank(), axis.ticks.length=unit(0,"cm")) + guides(linetype = FALSE) +
  scale_x_discrete(labels = paste("Week", seq(from = 0, to = 7))) + ylab(NULL) + 
  annotate("text", label = "Pages read", x = "1", y = 10) +
  theme(plot.margin = unit(c(1,.5,.1,.8), "cm")) + geom_hline(yintercept = 1)
pTop

pBot <- ggplot(data = data, aes(x = week)) + geom_bar(aes(linetype = weekday, y = normTotal), 
                                                      stat = "identity", position = "dodge", fill = "dodgerblue") + 
  labs(fill = NULL) +
  xlab(NULL) + ylab("Number of hours") + geom_bar(aes(y = weekNormPages), stat = "identity", alpha = 0.3) + 
  theme(panel.background = element_blank(), axis.ticks.length=unit(0,"cm")) + guides(linetype = FALSE) + 
  scale_x_discrete(labels = NULL) + guides(fill = FALSE) + ylab(NULL) + scale_y_reverse() + 
  theme(plot.margin = unit(c(.1,.5,1,.8), "cm")) + 
  annotate("text", label = "Time spent", x = "1", y = 4) + geom_hline(yintercept = 1)
pBot

grid.arrange(pTop, pBot, heights = c(.5, .5), widths = c(0.5, 0.1))

这似乎是本着改进原版的精神,我喜欢这个主意。我不喜欢原始的或您自己的任意/彩虹色。尝试顺序设置颜色。颠倒的杠也不适合我。
xan 2015年

我认为顺序颜色可能会有所改善-谢谢您的建议。另一方面,我认为颜色不是那么重要,因为我们有每周定界符来指导我们(星期一是第一天,星期二是第二天,等等)。正如我在回答中所暗示的,我们对背对背情节也表示同意。该图的一个改进可能是根据两个垂直轴各自的每日平均值来缩放它们。这样可以比较周数和Pages阅读/时间花费。
swmo 2015年

既然提到的颜色并不重要,对我而言,消除颜色变化可能是可行的。星期几已按位置区分。或者,也许只是使周三成为其他锚点而有所不同。
xan 2015年

非常好!我还没有解决其他问题,但这肯定是一个很大的进步!非常感谢

1
我已经编辑了答案,以包含评论中的想法。@面对挑战,很高兴您发现它很有帮助。
swmo 2015年

1

Xÿ

  1. 将数据绘制成以两周为分组变量的线-因此,为了每周获得两行,
  2. 或使用成组的条形图,在每个工作日中,第1周和第2周都有两个条形,每个条形每天都有页面/小时数。

请参阅上述1.所做的事情,以及2.不幸的是看起来并不十分有意义。谢谢您的回答。

我认为它没有问题...看起来不太好,但这是您使用的软件和/或图形编辑的问题。
蒂姆

1,您真的无法确定第1周或第2周的情况是否会好转,如果再增加几周的时间将变得太混乱了。2.我实际上并不介意这一点,它确实不错。也许我可以将原件和这张原件放在一起,以使其更加清晰。(现在也在上面显示)

1

下图显示了使用线而不是堆积的条形图显示的每周内的学习小时数和总页数,希望可以更轻松地查看每周内的趋势并在几周之间进行比较。我在缺失的几周中都用零填充,但您可以根据需要排除这些周。的R数据处理和绘图生成代码发布在图形下方。

在此处输入图片说明

在执行以下步骤时,我首先将问题中发布的数据加载到名为的数据框中dat

library(lubridate)
library(dplyr)
library(reshape2)
library(ggplot2)
library(scales)

# Ordered vector of weekdays
weekdayVec = c("Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")

# Change column name
names(dat)[2] = "Hours of Study"

# Convert Date to date format
dat$Date = as.Date(dmy(dat$Date))

# Add a weekday variable and order from Sunday to Saturday
dat$Day = weekdays(dat$Date)
dat$Day = factor(dat$Day, levels=weekdayVec)

# Number the weeks from 1 to 11 and convert to a factor
dat$Week = paste("Week", (as.numeric(dat$Date) - as.numeric(dat$Date[3])) %/% 7 + 2)
dat$Week = factor(dat$Week, levels=paste("Week", c(1:11))) 

## Fill in empty dates (so we can show zero pages/hours during weeks 5 and 6 if we want)
dataFill = expand.grid(Week = paste("Week",1:11), Day=weekdayVec)
dat = merge(dataFill, dat, by=c("Week","Day"), all=TRUE)

# Fill in missing dates
dat$Date = as.Date(c(rep(NA,5), seq(as.Date("2014-11-21"),as.Date("2015-01-30"),1), NA))

# Convert missing data to zeros for Hours of Study and Total Pages
dat = dat %>% mutate(`Hours of Study` = ifelse(is.na(`Hours of Study`), 0, `Hours of Study`),
               `Total Pages` = ifelse(is.na(`Total Pages`), 0, `Total Pages`)) 

# Melt data into long format (for facetting in ggplot2)
dat.m = dat %>% melt(id.var=1:3) %>%
  group_by(Week, variable) %>%
  mutate(cumValue = cumsum(value))

# Plot Hours and Pages by date, with separate cumulative 
# curves for each week
ggplot(dat.m %>% group_by(Week, variable) %>% arrange(Week, Day), 
       aes(Date, cumValue, colour=Week, group=Week)) +
  geom_vline(xintercept=as.numeric(seq(as.Date("2014-11-16"), as.Date("2015-02-06"), 7)-0.5), colour="grey70") +
  geom_line(position=position_dodge(width=0.5)) +
  geom_point(size=2.5, position=position_dodge(width=0.5)) +
  facet_grid(variable ~ ., scales="free_y") +
  guides(colour=guide_legend(reverse=TRUE)) + labs(y="",x="") +
  guides(colour=FALSE) +
  scale_x_date(limits=c(as.Date("2014-11-16"),as.Date("2015-01-31")),
               breaks=seq(as.Date("2014-11-16"),as.Date("2015-01-31"), 7)-0.5,
               labels=paste("                  Week",1:11)) +
  theme_grey(base_size=15)

这是一个非常好的主意,并且绝对解决了难以确定要看哪一天的问题。谢谢

0

另一个选项是气泡图,您可以在其中为一个变量设置垂直高度,为另一个变量设置点大小。下面,日期(天)为水平,研究小时为垂直,每天覆盖的页面为气泡大小,而星期为彩色。

在此处输入图片说明


0

您可以在3D中绘图。我没有验证星期几的计算是否正确,是否找到了最佳视角等等,但这应该可以给您带来启示。进一步的装饰也是可能的。例如,将点与直线连接起来并移动网格线使其对应于每个星期一可能会更好。

实际上,尝试进行有趣的操作是使每个左右网格线(如该角度所示)对应于一周的同一天(例如星期一),然后将箱形图放置在内部的底部和背面右侧网格线。箱线图分别对应于每周的总时数和总页数。我几乎可以肯定,这可能与rgl有关,但需要进行一些修补。可能值得。小提琴图或豆图可能更好。

在此处输入图片说明

数据(用于输入到R):

dat<-structure(list(Date = structure(c(17L, 19L, 21L, 23L, 25L, 27L, 
29L, 31L, 33L, 38L, 2L, 14L, 36L, 42L, 44L, 46L, 48L, 34L, 39L, 
40L, 1L, 13L, 35L, 41L, 43L, 45L, 47L, 49L, 50L, 3L, 4L, 5L, 
6L, 7L, 8L, 9L, 10L, 11L, 12L, 15L, 16L, 18L, 20L, 22L, 24L, 
26L, 28L, 30L, 32L, 37L), .Label = c("1/1/2015", "1/12/2014", 
"10/1/2015", "11/1/2015", "12/1/2015", "13/01/2015", "14/01/2015", 
"15/01/2015", "16/01/2015", "17/01/2015", "18/01/2015", "19/01/2015", 
"2/1/2015", "2/12/2014", "20/01/2015", "21/01/2015", "21/11/2014", 
"22/01/2015", "22/11/2014", "23/01/2015", "23/11/2014", "24/01/2015", 
"24/11/2014", "25/01/2015", "25/11/2014", "26/01/2015", "26/11/2014", 
"27/01/2015", "27/11/2014", "28/01/2015", "28/11/2014", "29/01/2015", 
"29/11/2014", "29/12/2014", "3/1/2015", "3/12/2014", "30/01/2015", 
"30/11/2014", "30/12/2014", "31/12/2014", "4/1/2015", "4/12/2014", 
"5/1/2015", "5/12/2014", "6/1/2015", "6/12/2014", "7/1/2015", 
"7/12/2014", "8/1/2015", "9/1/2015"), class = "factor"), TotalHours = c(2.4166, 
0, 1.5833, 3.0166, 2.4999, 1.4833, 3.0499, 0, 2.4499, 2.8833, 
0, 4.1166, 1.3333, 1.2499, 1.6666, 0, 2.4833, 0, 1.2332, 0.3333, 
3.5666, 0.8166, 2.75, 0.4166, 1.2833, 0.3333, 0, 0, 2.35, 0.5666, 
0, 1.6666, 2.2666, 2.5165, 2.0166, 2.9666, 0.8333, 0.6666, 1.45, 
0.3166, 0, 0.2333, 0.85, 0, 0, 0.6666, 0.8333, 1.5498, 6.4159, 
2.9166), TotalPages = c(0L, 0L, 4L, 13L, 6L, 3L, 6L, 0L, 5L, 
2L, 0L, 8L, 5L, 3L, 8L, 0L, 9L, 0L, 1L, 0L, 2L, 0L, 28L, 0L, 
0L, 3L, 0L, 0L, 2L, 0L, 0L, 0L, 5L, 6L, 0L, 1L, 0L, 1L, 0L, 0L, 
0L, 0L, 2L, 0L, 0L, 4L, 1L, 5L, 9L, 0L)), .Names = c("Date", 
"TotalHours", "TotalPages"), class = "data.frame", row.names = c(NA, 
-50L))

绘制情节:

#Get Day of Week
dat<-cbind(weekdays(as.Date(dat[,1], format="%d/%m/%Y")),dat)
colnames(dat)[1]<-"DoW"

#3D Plot
require(rgl)
plot3d(dat[,2],dat[,3],dat[,4],size=15, 
xlab=colnames(dat)[2], ylab=colnames(dat)[3],
zlab=colnames(dat)[4],col=rainbow(7)[as.numeric(dat[,1])])
text3d(x=10, y=6, z=seq(25,15,length=7),levels(dat[,1]),
col=rainbow(7), font=2)
grid3d(side=c("x", "y+", "z"), lwd=1)

-1

在带有周数(一年),周几和小时和页面方面的热图之后,可能会有所帮助:

在此处输入图片说明

除去2个高值可以在绘图上提供更好的颜色渐变:

在此处输入图片说明

跟随条形图可能也会有所帮助。

在此处输入图片说明

它清楚地显示了2周的时间,没有任何工作。

用线作图也可能有用(线不混乱;也可以删除点,仅保留两条线)

在此处输入图片说明

他们清楚地传达了信息,同时简化了图面,以便于理解。

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.