首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >geom_boxplot (R)的库存烛台绘图问题

geom_boxplot (R)的库存烛台绘图问题
EN

Stack Overflow用户
提问于 2014-01-10 13:41:36
回答 4查看 7.8K关注 0票数 7

我正在使用geom_boxplot使用股票市场数据来绘制烛台。问题是,单个箱形图的上边缘和下边缘以及上胡须端点在y轴上显示的位置比它们的相应值要高得多。不过,每个盒子图的相对高度(上边和下边之间的差异)和下边须的终点都很好。下面是我的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
candlestickPlot <- function(x){

library("ggplot2")

# x is a data.frame with columns 'date','open','high','low','close'
x$candleLower <- pmin(x$open, x$close)
x$candleUpper <- pmax(x$open, x$close)
x$candleMiddle <- NA
x$fill <- "red"
x$fill[x$open < x$close] = "green"

# Draw the candlesticks
g <- ggplot(x, aes(x=date, lower=candleLower, middle=candleMiddle, upper=candleUpper, ymin=low, ymax=high)) 
g <- g + geom_boxplot(stat='identity', aes(group=date, fill=fill))
g 
}

下面是x:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    date     close volume  open  high   low
5 2013-12-30 25.82 3525026 27.30 27.76  25.7
4 2013-12-31 27.41 5487204 25.25 27.70 25.25
3 2014-01-02 30.70 7835374 29.25 31.24 29.21
2 2014-01-03 30.12 4577278 31.49 31.80 30.08
1 2014-01-06 30.65 4042724 30.89 31.88 30.37

我是不是做错了什么?

EN

回答 4

Stack Overflow用户

发布于 2015-09-21 21:34:24

与使用geom_boxplot描述的方式相比,使用ggplot2创建OHLC烛台有更有效的方法。您的代码看起来与链接中的示例非常相似:http://www.perdomocore.com/2012/using-ggplot-to-make-candlestick-charts-alpha/

似乎很多人都在使用geom_boxplot将基于该链接中的示例的ggplot烛台示例放在网上。但是使用geom_boxplot绘图的问题是,随着绘图条形图数量的增加,绘图本身在生成绘图时变得很慢。

这里有一个计算速度更快的解决方案,用于使用烛台/OHLC条绘制财务数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
library(quantmod)
FOSL <- getSymbols("FOSL", from="2015-01-01", auto.assign=FALSE)
names(FOSL) <- gsub("^.+\\.","",names(FOSL))  # remove "FOSL." from column names

rng <- "2015-08"
FOSL <- FOSL[rng]
FOSL <- data.frame(Date=as.POSIXct(index(FOSL)), FOSL[,1:4])

FOSL$chg <- ifelse(Cl(FOSL) > Op(FOSL), "up", "dn")
FOSL$width <- as.numeric(periodicity(FOSL)[1])
FOSL$flat_bar <- FOSL[, "High"] == FOSL[, "Low"]

# Candle chart:
pl <- ggplot(FOSL, aes(x=Date))+
  geom_linerange(aes(ymin=Low, ymax=High)) +
  theme_bw() +
  labs(title="FOSL") +
  geom_rect(aes(xmin = Date - width/2 * 0.9, xmax = Date + width/2 * 0.9, ymin = pmin(Open, Close), ymax = pmax(Open, Close), fill = chg)) + guides(fill = FALSE, colour = FALSE) + scale_fill_manual(values = c("dn" = "darkred", "up" = "darkgreen"))

# Handle special case of drawing a flat bar where OHLC = Open:
if (any(FOSL$flat_bar)) pl <- pl + geom_segment(data = FOSL[FOSL$flat_bar,], aes(x = Date - width / 2 * 0.9, y = Close, yend = Close, xend = Date + width / 2 * 0.9))

print(pl)

票数 12
EN

Stack Overflow用户

发布于 2016-12-01 03:29:36

感谢FXQuantTrader为R中的烛台酒吧介绍了一种漂亮而快速的替代方法!太棒了,简明扼要,易于阅读!以下是FXQuantTrader解决方案的一个改进版本,其中包括:

*-将其包装到一个函数中

**-支持较低的分辨率(最低可达1秒条形)

*-将蜡烛的胡须颜色从黑色更改为合适的颜色

== -为带有Close == Open的酒吧添加小水平线

== -将第三种颜色(蓝色)添加到关闭==打开的条形图中

-添加'alpha‘参数,允许您使整个烛台图表更加透明,因此当您在顶部绘制一些布林线和/或移动平均线时,条形图将不会那么分散注意力(更像背景)

  • 为新手提供更多评论,以弄清楚发生了什么:)

她来了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(ggplot2)
library(quantmod)
draw_candles <- function(df, title_param, alpha_param = 1){
  df$change <- ifelse(df$Close > df$Open, "up", ifelse(df$Close < df$Open, "down", "flat"))

  # originally the width of the bars was calculated by FXQuantTrader with use of 'periodicity()', which 
  # seems to work ok only with: ‘minute’,‘hourly’, ‘daily’,‘weekly’, ‘monthly’,
  # ‘quarterly’, and ‘yearly’, but can not do 1 sec bars while we want arbitrary bar size support!-)
  # df$width <- as.numeric(periodicity(df)[1])
  # So let us instead find delta (seconds) between 1st and 2nd row and just 
  # use it for all other rows. We check 1st 3 rows to avoid larger "weekend gaps"
  width_candidates <- c(as.numeric(difftime(df$Date[2], df$Date[1]), units = "secs"), 
                        as.numeric(difftime(df$Date[3], df$Date[2]), units = "secs"), 
                        as.numeric(difftime(df$Date[4], df$Date[3]), units = "secs"))

  df$width_s = min(width_candidates)  # one (same) candle width (in seconds) for all the bars

  # define the vector of candle colours either by name or by rgb()
  #candle_colors = c("down" = "red", "up" = "green", "flat" = "blue")
  candle_colors = c("down" = rgb(192,0,0,alpha=255,maxColorValue=255), "up" = rgb(0,192,0,alpha=255,maxColorValue=255), "flat" = rgb(0,0,192,alpha=255,maxColorValue=255))

  # Candle chart:
  g <- ggplot(df, aes(x=Date))+
    geom_linerange(aes(ymin=Low, ymax=High, colour = change), alpha = alpha_param) +  # candle whiskerss (vertical thin lines:)
    theme_bw() +
    labs(title=title_param) +
    geom_rect(aes(xmin = Date - width_s/2 * 0.9, xmax = Date + width_s/2 * 0.9, ymin = pmin(Open, Close), ymax = pmax(Open, Close), fill = change), alpha = alpha_param) +                            # cabdke body
    guides(fill = FALSE, colour = FALSE) +
    scale_color_manual(values = candle_colors) +  # color for line
    scale_fill_manual(values = candle_colors)     # color for candle fill  

    # Handle special cases: flat bar and Open == close:
    if (any(df$change == "flat")) g <- g + geom_segment(data = df[df$change == "flat",], aes(x = Date - width_s / 2 * 0.9, y = Close, yend = Close, xend = Date + width_s / 2 * 0.9, colour = change), alpha = alpha_param)

  #print(g)
  g
}
票数 6
EN

Stack Overflow用户

发布于 2014-01-10 16:51:27

我不能完全理解你的问题,但这似乎工作得很好:

http://www.perdomocore.com/2012/using-ggplot-to-make-candlestick-charts-alpha/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21045866

复制
相关文章
.net通过boundary上传文件
public void UploadVedio(string fileName) { fileName = "input_video_only_3sec.mp4"; byte[] vedioBytes = null; using (FileStream fileStream = new FileStream(@"D:\缓存内容\test.mp4", FileMode.Open, FileAccess.Read))
SingYi
2022/07/13
5270
.net通过boundary上传文件
Selenium文件上传
日常的UI自动化测试过程中,经常会遇到文件上传的业务操作。对于通过input标签实现的上传功能, 我们可以直接利用Selenium提供的方法send_keys() 实现文件上传。这种文件上传实现方式是将本地文件的路径作为一个值放在input标签中,然后通过form表单将这个值提交给服务器。 本文将针对input标签示范自动化执行文件上传功能。
Altumn
2019/10/21
1.2K0
Selenium文件上传
Android通过URL文件下载及文件名提取
在写一个Android应用,需求也很简单就是通过接收JSON发送的数据进行解释获取URL的地址,然后根据这个地址把其文件下载。一下开始想用okhttp通过GET来下载问题,但问题是okhttp考虑得比较多也很完善(断线续传等);但这些我没必要也不需要这么复杂啊,那好吧简单点。就使用安卓自带的DownloadManager进行下载,不过用DownloadManager下载必须要满足API level 9以上,好在我的项目满足了,那就用呗,四行代码搞掂。
谭广健
2020/08/07
4.2K0
文件上传漏洞-通过ctf真题学习
前言:最近在学习一些ctf的东西,所以自己想从一个小白的身份,复现一些web的漏洞。学习一些大佬的思路!
亿人安全
2022/06/30
1.6K0
文件上传漏洞-通过ctf真题学习
通过 Smb 上传文件到电脑(无需密码)
win10基本都关闭了SMB1,但是win7是可以使用的,可以设置打开SMB1。也可以使用 SMB2/SMB3 。
Jingbin
2020/06/11
2.1K0
通过 Smb 上传文件到电脑(无需密码)
通过URL载入ShellCode代码
将生成的shellcode放到web服务器上,本地不保存恶意代码,本地只负责加载到内存运行,这样可以很好的躲过查杀。
微软技术分享
2022/12/28
6810
通过URL载入ShellCode代码
通过Url抓取网页内容
本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。
Java架构师必看
2021/03/22
1.7K0
通过 PHP把文件上传到服务器
注释: 允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。
用户9042463
2021/09/29
3.9K0
【逻辑漏洞】通过条件竞争进行文件上传
基本概念:竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。
一名白帽的成长史
2020/06/24
5.5K0
【逻辑漏洞】通过条件竞争进行文件上传
asp.net中通过input file上传文件
<input id=”htmlFile” type=”file” runat=”server” />
全栈程序员站长
2022/09/09
2.1K0
element-ui上传组件,通过自定义请求上传文件
首先关闭自动上传,并给随便给action赋值一个字符串。(action是必填属性)
codeniu
2022/02/25
4.4K0
Selenium之文件上传、下载
文件上传功能的话,一般都是需要点击上传按钮,然后打开本地windwos窗口,从窗口中选择文件,然后进行上传,但是windwos的弹窗不属于浏览器页面的元素,通过WebDriver无法操作windwos控件,那么遇到这种情况的话,文件上传操作该如何去模拟呢?下面让小编带你来了解一下吧。
小博测试成长之路
2021/03/08
1.7K0
Selenium之文件上传、下载
通过 ReferenceOutputAssembly=False 在引用项目时,不额外引入依赖文件
正常当两个 .NET 项目有引用的时候,会将一个的输出拷贝到另一个的输出目录下。但有时我们只是希望通过引用建立一个依赖关系而已,最终两个项目的输出是独立的。
walterlv
2023/10/22
2840
通过 ReferenceOutputAssembly=False 在引用项目时,不额外引入依赖文件
Electron通过协议url唤起应用
前言 对于一个 URL 来说,其实就是指定了一个协议(protocol),然后让系统用对应的应用去打开它。如 myapp://openapp?name=1&pwd=2,系统会去找到已经注册了 myap
码客说
2021/01/29
3.9K1
coreml之通过URL加载模型
在xcode中使用mlmodel模型,之前说的最简单的方法是将模型拖进工程中即可,xcode会自动生成有关模型的前向预测接口,这种方式非常简单,但是更新模型就很不方便。
一棹烟波
2019/07/02
1.5K0
通过PicturreId获取图片路径(Url)
1.直接使用接口服务 _pictureService.GetPictureUrl((int)entity.SponsorPictureId); //entity是具体查询出来的实体对象 SponsorPictureId是entity实体中的图片Id 2.GetPictureUrl方法存在IPicture接口的实现类中  (2.1) IPicture 接口的定义 string GetPictureUrl(int pictureId, int targetSize = 0,
wfaceboss
2019/04/08
1.8K0
pdfGPT——通过AI与上传的PDF文件进行聊天
在AI浪潮风起云涌的当下,AI正在不断地重塑着每一个行业。笔者的目标是在公众号中把所有当下流行的AI应用都梳理一遍,在整理技术拓展思路的同时也给大家做一个科普。有一段时间没有介绍aigc相关的应用了,今天翻到了一个很早之前调研过的火了很久的一个项目—pdfGPT。
山行AI
2023/06/14
3K0
pdfGPT——通过AI与上传的PDF文件进行聊天
通过selenium抓取新浪微博
由于新浪微博的手机网页的访问加入了验证码,所以抓取新浪微博的后门行不通了,经过一系列的研究,最终使用selenium工具模仿浏览器行为访问新浪微博公众号,因为浏览器访问网页时是以访客的形式访问 ,所以避免了用户登录这一过程,可以顺利的进行指定微博的内容抓取,selenium的缺点是无法确定页面加载完毕的时间也js执行完毕的时间,所以在抓取效率方面会有所牺牲。
code2roc
2023/07/19
2480
EasyDSS平台如何通过接口在特定的视频分类里上传点播文件?
EasyDSS视频直播点播平台支持Flash、H5播放,可提供一站式的视频推拉流、转码、点播、直播、时移回放、存储等服务,支持播放H.265编码视频,可兼容多操作系统。搭配RTMP高清摄像头使用,可将设备的实时流推送到平台上,实现无人机视频推流直播,可应用在城市航拍、农业植保、森林防火、秸秆焚烧、电力巡检等场景中。
TSINGSEE青犀视频
2022/06/15
9030
点击加载更多

相似问题

船舶/潜艇运动模型的简单物理

40

简单(快速)掷出物理学

10

如何处理固定端和滑动重量的绳物理?

10

网络物理-内插导致物理引擎爆炸

10

简单游戏中的碰撞检测/物理

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文