如何在R中创建类似色谱图的图表?
我正试图用R创建一个图表,就像这样。描述中说这是一张色标图,但我在网上找不到创建这种类型图表的任何资源或示例 我有所有事件的时间和它们的类别,我唯一需要做的就是根据时间和日期绘制每个事件。我试图调整geom_lines()和geom_boxplot()之类的东西,但它们都给了我一个堆叠的条,而不是事件的分布。geom_points()可以实现接近我想要的效果,但它们都是点,而不是单线/条形 数据的一个例子是:如何在R中创建类似色谱图的图表?,r,ggplot2,R,Ggplot2,我正试图用R创建一个图表,就像这样。描述中说这是一张色标图,但我在网上找不到创建这种类型图表的任何资源或示例 我有所有事件的时间和它们的类别,我唯一需要做的就是根据时间和日期绘制每个事件。我试图调整geom_lines()和geom_boxplot()之类的东西,但它们都给了我一个堆叠的条,而不是事件的分布。geom_points()可以实现接近我想要的效果,但它们都是点,而不是单线/条形 数据的一个例子是: Study Period Hour of day Event Day 1
Study Period Hour of day Event
Day 1 7:00 Add an activity
Day 1 9:00 Delete an activity
Day 2 8:00 View timeline
Day 3 11:00 View timeline
..您可以使用
geom\u纵横杆
实现这样的图表。首先,让我们制作一些类似于您的数据
我已经包括了一列主题
,将事件标记为a-F,并假设所有时间戳的格式都与示例数据相同(H:M)
我们可以通过管道将结果传输到ggplot
。请注意,在stat\u summary
中,我们为fun.y
、fun.ymin
和fun.ymax
提供了相同的值<这里使用的是code>max,但它可以是任何返回未更改的decDay
值的函数
scale\u y\u reverse
与参数一起使用,以生成一个y轴,该y轴与问题中的示例图表类似
df1 %>%
mutate(D = as.numeric(gsub("Day ", "", Day)),
H = as.numeric(gsub(":00", "", Time)),
decDay = D + H/24) %>%
ggplot(aes(Subject, decDay)) +
stat_summary(geom = "crossbar",
fun.y = max,
fun.ymax = max,
fun.ymin = max,
aes(color = Event),
width = 0.8) +
scale_y_reverse(breaks = c(1, 28),
labels = c("Day 1", "Day 28")) +
labs(y = "Study Period (Day 1-28)")
结果:
请提供一些纯文本格式的示例数据(使用例如
dput
),这样我们就可以使用了。@neilfws好的,我刚刚添加了。感谢您的提醒。看起来您可以使用ggplot(一些数据,aes(参与者,日期时间,颜色=事件))+geom\u tile()+facet\u wrap(~SYSTEM)
。我建议您将学习期间
和一天中的小时
合并到一个数字列中,您是否可以像这里的日时间一样使用它们。@JonSpring您所说的“方面(~SYSTEM)”是什么意思?我认为facet_wrap(~)只是将绘图包装成多个子绘图的东西?也许geom_tile(aes(参与者,日时间,填充=事件),宽度=1,高度=H)
。H的值取决于时间戳的频率和数字格式,因此,例如,如果y轴为POSIXct,并且希望槽口表示1小时秒,则H的值可能需要为3600。
df1 %>%
mutate(D = as.numeric(gsub("Day ", "", Day)),
H = as.numeric(gsub(":00", "", Time)),
decDay = D + H/24) %>%
head()
Subject Event Day Time D H decDay
1 7 C Day 13 1:00 13 1 13.04167
2 3 B Day 19 12:00 19 12 19.50000
3 7 C Day 19 7:00 19 7 19.29167
4 7 A Day 27 5:00 27 5 27.20833
5 8 F Day 25 17:00 25 17 25.70833
6 7 C Day 20 0:00 20 0 20.00000
df1 %>%
mutate(D = as.numeric(gsub("Day ", "", Day)),
H = as.numeric(gsub(":00", "", Time)),
decDay = D + H/24) %>%
ggplot(aes(Subject, decDay)) +
stat_summary(geom = "crossbar",
fun.y = max,
fun.ymax = max,
fun.ymin = max,
aes(color = Event),
width = 0.8) +
scale_y_reverse(breaks = c(1, 28),
labels = c("Day 1", "Day 28")) +
labs(y = "Study Period (Day 1-28)")