geom_point的空系列问题
我正在尝试为模拟价格系列的线图创建一个可重复的例程,其中叠加了标记买(蓝点)和卖(红点)点的点。
在某些情况下,没有买入或卖出点为geom_point创建一个空对象,因此它会给出错误并阻止完成图表。
有效的示例(存在买卖点)
Time <- c(seq(1,12,1))
Prices <- c(36.23, 35.87, 36.18, 36.54, 35.96, 36.68, 37.16, 37.69, 38.15, 38.61, 39.91, 40.45)
TradingPrice_BUY <- c(36.23,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA)
TradingPrice_SELL <- c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,39.91,NA)
Trades<-data.frame(Time ,Prices, TradingPrice_BUY, TradingPrice_SELL)
library(ggplot2)
ggplot(data=Trades,aes(x=Time,y=Prices,group=1)) +
theme_bw() + geom_line() + xlab("Time") + ylab("Price") +
geom_point(data=Trades, aes(x=Time,y=TradingPrice_BUY),color="blue",shape=19) +
geom_point(data=Trades, aes(x=Time,y=TradingPrice_SELL),color="red",shape=19)
卖点不存在的情况示例
错误:提供给连续刻度的离散值
Time <- c(seq(1,12,1))
Prices <- c(36.23, 35.87, 36.18, 36.54, 35.96, 36.68, 37.16, 37.69, 38.15, 38.61, 39.91, 40.45)
TradingPrice_BUY <- c(36.23,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA)
TradingPrice_SELL <- c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA)
Trades<-data.frame(Time ,Prices, TradingPrice_BUY, TradingPrice_SELL)
library(ggplot2)
ggplot(data=Trades,aes(x=Time,y=Prices,group=1)) +
theme_bw() + geom_line() + xlab("Time") + ylab("Price") +
geom_point(data=Trades, aes(x=Time,y=TradingPrice_BUY),color="blue",shape=19) +
geom_point(data=Trades, aes(x=Time,y=TradingPrice_SELL),color="red",shape=19)
我试图解决它,但又出现了另一个错误
错误:美学必须是长度1或与数据(1)相同:x,y,组
ggplot(data=Trades,aes(x=Time,y=Prices,group=1)) +
theme_bw() +geom_line()+xlab("Time") + ylab("Price")+
geom_point(data=subset(Trades,!is.na(Trades$TradingPrice_BUY)),aes(x=Time,y=TradingPrice_BUY),color="blue",shape=19) +
geom_point(data=subset(Trades,is.na(Trades$TradingPrice_BUY)), aes(x=1,y=Prices[1]),color=NA) +
geom_point(data=subset(Trades,!is.na(Trades$TradingPrice_SELL)), aes(x=Time,y=TradingPrice_SELL),color="red",shape=19) +
geom_point(data=subset(Trades,is.na(Trades$TradingPrice_SELL)),aes(x=1,y=Prices[1]),color=NA)
如何解决这个问题?
答案 0 :(得分:2)
使用ggplot
进行绘图时,您需要将数据保存在“整洁”状态。事物的格式很好地工作。不是为不同的点添加不同的图层,而是应该重塑数据并让美学为您处理格式。在这里,我使用reshape2::melt
来&#34; tidy&#34;你的数据。例如
point_data <- na.omit(reshape2::melt(Trades[c(1,3,4)], "Time"))
ggplot(data=Trades,aes(x=Time, y=Prices)) +
theme_bw() + geom_line() + xlab("Time") + ylab("Price") +
geom_point(data=point_data, aes(x=Time, y=value, color=variable), shape=19) +
scale_color_manual(values=c(
"TradingPrice_BUY"="blue",
"TradingPrice_SELL"="red"), guide=FALSE)
这应该可以正常工作