首页 > 解决方案 > cran-r:用于绘制交易分布的 beanplot 的替代方案

问题描述

我正在尝试重现我在 Carlos Drago 的论文中发现的情节(幻灯片 #13)。但我被困住了。附上一张剧情图。我有兴趣做右手边的情节。我搜索了 Stackoverflow 并没有找到解决方案。堆栈溢出中的大多数直方图问题都是针对相互重叠的多个直方图。在这种情况下,它是按日期索引的单独直方图旋转 90 度。如果可能的话,我想将时间序列(左侧图)覆盖在右侧图的顶部,以便它们都使用左侧 y 轴。最后,不是直方图(根据定义给出每条柱的频率),而是可以使用实际值。假设该图使用的是在一分钟间隔内交易的股票。每个酒吧,它不会显示以该价格交易的股票百分比,而是显示时间间隔内交易的股票数量。(也就是说,我猜是旋转的条形图而不是旋转的直方图)

非常欢迎提出建议(或指向先前解决方案的链接)。

提前致谢。

在此处输入图像描述

标签: r

解决方案


ggridges可能会提供您所追求的功能。这是一个使用从小插图中获取iris数据的稍微调整的示例。ggridges

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()

在此处输入图像描述


推荐阅读