2017-12-18 248 views
-1

希望你们能帮助我,我拼命地创建一个类似于此附挂的图。行为图可能在R/ggplot2?

proposed graph

完整的垂直线表示在所有领域(以及可能引发各区域的事件)共享经验。我对情节中缺乏颜色表示歉意。就我目前的目的而言,每个标签都没有关系,只是稍后我才能添加它们。

下面是一些示例数据。我目前标注所有的垂直条为“移动的一个”和所有的小酒吧,“运动二”的让一切明确的,因为我可以:

move_one <- 
    data.frame(
    start = c(10 , 1000, 3000) 
    , end = c(250, 1500, 4500) 
    , label = "Movement One" 
) 

move_two <- 
    data.frame(
    ind = rep(1:3, each = 3) 
    , start = c(275, 1600, 3800 
       , 20, 1010, 3010 
       , 240, 1400, 4400) 
    , end = c(295, 1750, 4400 
       , 30, 1700, 3600 
       , 290, 1800, 4500) 
    , label = "Movement Two" 
) 

start end  label 
1 10 250 Movement One 
2 1000 1500 Movement One 
3 3000 4500 Movement One 

ind start end  label 
1 1 275 295 Movement Two 
2 1 1600 1750 Movement Two 
3 1 3800 4400 Movement Two 
4 2 20 30 Movement Two 
5 2 1010 1700 Movement Two 
6 2 3010 3600 Movement Two 
7 3 240 290 Movement Two 
8 3 1400 1800 Movement Two 
9 3 4400 4500 Movement Two 

分别(这些做匹配这里的手工绘制图表)。

+1

你至少可以使用与运动1和2,运动两种不同的颜色,也是很难明白什么是垂直的“带”对应。并请删除问题中的笑话。 – dmi3kno

+0

道歉不是很清楚,我是只用一支笔一列火车不幸所以试着做对角线和水平阴影显示忒差 - 诚然,这是不明确。垂直条指两个运动之一的实例(运动1 =对角阴影,运动2 =水平阴影)。水平条是当场景中的某个区域被查看时的实例,基本上我想覆盖这两个数据集。至于笑话,我不确定你指的是什么。 – James

+0

我会刺探编辑问题,但不应编辑以更改基本问题(从基本图形移至特定方面)。现在你有了一个基础,问一个新的问题来跟踪细节(以及两者之间的联系)。 –

回答

2

“这是R.没有如果,只有怎么样。” -Simon布贝格

基本上,我们只需要在通过每个组件分别ggplot。首先,我们使用geom_rect来创建底层垂直条。然后用geom_hline添加每个区域的水平线。最后,在另一个geom_rect的顶部添加小盒子。带有轴标签的波兰语以及您希望从那里获得的任何其他主题设置。

ggplot() + 
    geom_rect(
    aes(xmin = start 
     , xmax = end 
     , fill = label 
     , ymin = 0 
     , ymax = 4) 
    , move_one 
) + 
    geom_hline(aes(yintercept = ind) 
      , move_two) + 
    geom_rect(
    aes(xmin = start 
     , xmax = end 
     , fill = label 
     , ymin = ind - 1/3 
     , ymax = ind + 1/3) 
    , move_two 
) + 
    xlab("Time (milliseconds)") + 
    ylab("Area") 

给人

enter image description here

+0

感谢马克,它给我的激励和鼓舞,我需要尝试这个项目的最后一次。我一直在玩你的例子,但我只是想澄清一些代码的一部分。在ind = rep(1:3,每个= 3),我会改变1:3来增加区域的数量吗?我有〜37。另外,每个= 3达到什么?在每一个地区,目前有3个绿色区块,是否与此有关?在我的实际数据中,每条线上会有不同数量的绿色块。目前我试图在y轴上使用文本标签,而不是使用0,1,2..loving ggplot2! – James

+0

我假设你已经有数据在手中了。如果您正在将其数字化(即从纸质记录中转录),我会**不会**在R中输入数据 - 我会将数据保存为csv(例如,在LibreOffice,Google表格或Excel中)。要查看每段代码确实,分开运行('each'告诉'rep'多少次连续把它重复向量的每个分量;使用'times'而不是重复全矢量,很多时候)。输入像这样的真实数据会很快变得混乱(并且容易出错)。 –

+0

对于数据标签,您*可以*使用一个因子作为y轴。但是,它会使控制它后面的竖条更难。相反,我会使用因子索引(与因子水平相关的数字)进行绘图,然后修改比例以显示标签。例如'scale_x_continuous(符= 1:长度(水平(move_two IND $)),标签=水平(move_two $ IND))' –