我正在尝试复制我在卡洛斯·德拉戈(Carlos Drago)的论文中发现的情节(幻灯片#13)。但是我被困住了。附件是该图的图像。我有兴趣做右侧图。我搜索了Stackoverflow,但找不到解决方案。堆栈溢出中的大多数直方图问题都是针对多个相互重叠的直方图。在这种情况下,它是按日期索引的独立直方图旋转90度。如果可能的话,我想将时间序列(左侧图)覆盖在右侧图的顶部,以便它们都使用左侧的y轴。最后,可以使用实际值代替直方图(根据定义,直方图给出每条频率)。假设该情节使用的是在一分钟间隔内交易的股票。每个柱形图都没有显示该价格下所交易股票的百分比,而是显示了该时间间隔内交易的股票数量。 (也就是说,我猜是旋转的条形图而不是旋转的直方图)
非常欢迎提出建议(或指向先前解决方案的链接)。
谢谢。
答案 0 :(得分:0)
ggridges
可能会提供您所需要的功能。这是一个略微调整的示例,其中使用了从the ggridges
vignette提取的iris
数据。
library(ggridges)
ggplot(iris, aes(x = Sepal.Length, y = Species)) +
geom_density_ridges(stat = "binline", bins = 20, scale = 1, draw_baseline = FALSE) +
coord_flip()
这是另一个示例,它使用一些更接近示例图的模拟数据。
# Sample data
library(zoo)
set.seed(2017)
date <- seq.POSIXt(ISOdate(2018, 7, 9), ISOdate(2018, 7, 15), by = "min")
x <- zoo(cumsum(1 + round(20 * rnorm(length(date)), 2)), date)
library(tidyverse)
library(ggridges)
让我们创建类似于示例图左右面板中的图。
左图
as.data.frame(x) %>%
rownames_to_column("date") %>%
mutate(date = as.POSIXct(date)) %>%
ggplot(aes(date, x)) +
geom_line()
右侧面板图
as.data.frame(x) %>%
rownames_to_column("date") %>%
mutate(date = as.factor(as.Date(date))) %>%
ggplot(aes(x, date)) +
geom_density_ridges(stat = "binline", bins = 50, scale = 1, draw_baseline = FALSE) +
coord_flip()