R/ggplot2中可能存在的行为图?
希望你们能帮助我,我正在拼命地尝试创建一个类似于附件的图表 完整的竖条表示所有区域共享的经验(可能触发每个区域的事件)。我为情节缺乏色彩而道歉。就我目前的目的而言,每个标签上的标签并不重要,重要的是我以后能够添加它们 下面是一些示例数据。我目前正在将所有垂直条标记为“运动一”,将所有较小的条标记为“运动二”,以尽可能地保持清晰:R/ggplot2中可能存在的行为图?,r,ggplot2,graph,R,Ggplot2,Graph,希望你们能帮助我,我正在拼命地尝试创建一个类似于附件的图表 完整的竖条表示所有区域共享的经验(可能触发每个区域的事件)。我为情节缺乏色彩而道歉。就我目前的目的而言,每个标签上的标签并不重要,重要的是我以后能够添加它们 下面是一些示例数据。我目前正在将所有垂直条标记为“运动一”,将所有较小的条标记为“运动二”,以尽可能地保持清晰: move_one <- data.frame( start = c(10 , 1000, 3000) , end = c(250, 1500
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"
)
及
分别(这些与这里手绘的图表不匹配)。这是R。没有如果。只有如何。“-西蒙·布隆伯格
基本上,我们只需要将每个组件分别传递到ggplot
。首先,我们使用geom\u rect
创建底层垂直条。然后使用geom\u hline
为每个区域添加水平线。最后,用另一个geom\u 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")
给予
您能否至少使用两种不同的颜色来对应第1步和第2步。也很难理解垂直“带”对应什么。抱歉,这不是很清楚,我在火车上只带了一支笔,不幸的是,我试着用对角线和水平阴影来显示它们的区别——诚然,这并不清楚。垂直条表示两个运动之一的实例(运动1=对角线着色,运动2=水平着色)。水平条是查看场景中某个区域的实例,本质上我希望覆盖这两个数据集。至于笑话,我不确定你指的是什么。我会尝试编辑这个问题,但你不应该通过编辑来更改基本问题(从基本图形移动到特定方面)。现在你有了基础,问一个新问题来跟进细节(以及两者之间的联系)。感谢这个标记,它给了我动力和灵感,我需要最后一次尝试这个项目。我一直在玩你的例子,但我只是想澄清代码的一些部分。在ind=rep(1:3,each=3)中,我是否会更改1:3以增加区域数?我大约有37岁。另外,每个=3实现了什么?在每一条区域线上,目前有3个绿色街区,与此相关吗?在我的实际数据中,每行上都会有不同数量的绿色块。目前我正在尝试在y轴上使用文本标签,而不是0,1,2..2!我假设你已经在某个地方拿到了数据。如果您正在对其进行数字化(即,从纸质记录转录),我不会在R中输入数据——我会将数据保存为csv(例如,在LibreOffice、Google Sheets或Excel中)。要查看每段代码的作用,请分别运行它们(
each
告诉rep
要在一行中放置它正在重复的向量的每个分量多少次;使用times
将整个向量重复多次)。像这样输入真实数据会很快变得混乱(并且容易出错)。对于数据标签,可以使用因子作为y轴。然而,这将使它更难控制其背后的垂直杆。相反,我将使用因子索引(与因子级别关联的数字)进行绘图,然后修改比例以显示标签。e、 g.scale\u x\u continuous(breaks=1:length(levels(move\u two$ind)),labels=levels(move\u two$ind))
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
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")