更改绘图区背景颜色 [英] Change plot area background color
问题描述
我想用我们公司的颜色在 R 中做一个图表.这意味着所有图表的背景应该是浅蓝色,但是绘图区域应该是白色.我正在寻找答案,发现绘制 rect 可以(几乎)完成这项工作.然而,绘图区域现在是白色的,图形不再可见.这甚至可能吗?
I would like to do a graph in R using our company colors. This means the background of all charts should be a light blue, the plotting region however should be white. I was searching for answers and found that drawing a rect does the job (almost). However the plotting region is now white and the graph not visible anymore. Is this even possible?
getSymbols('SPY', from='1998-01-01', to='2011-07-31', adjust=T)
GRAPH_BLUE<-rgb(43/255, 71/255,153/255)
GRAPH_ORANGE<-rgb(243/255, 112/255, 33/255)
GRAPH_BACKGROUND<-rgb(180/255, 226/255, 244/255)
par(bg=GRAPH_BACKGROUND)
colorPlottingBackground<-function(PlottingBackgroundColor = "white"){
rect(par("usr")[1], par("usr")[3], par("usr")[2], par("usr")[4], col ="white")
}
plot.xts(SPY, col=GRAPH_BLUE)
colorPlottingBackground()
推荐答案
问题是您在绘制数据后绘制了白色矩形,因此会覆盖它们.由于 plot.xts
没有允许您在绘制矩形后调用它的参数 add
,我看到的唯一解决方案是修改函数 plot.xts
.
The issue is that you plot your white rectangle after plotting your data, therefore overwriting them. Since plot.xts
doesn't have an argument add
that would allow you to call it after drawing the rectangle, the only solution I see would be to modify function plot.xts
.
plot.xtsMODIFIED<-function (x, y = NULL, type = "l", auto.grid = TRUE, major.ticks = "auto",
minor.ticks = TRUE, major.format = TRUE, bar.col = "grey",
candle.col = "white", ann = TRUE, axes = TRUE, ...)
{
series.title <- deparse(substitute(x))
ep <- axTicksByTime(x, major.ticks, format.labels = major.format)
otype <- type
if (is.OHLC(x) && type %in% c("candles", "bars")) {
x <- x[, has.OHLC(x, TRUE)]
xycoords <- list(x = .index(x), y = seq(min(x), max(x),
length.out = NROW(x)))
type <- "n"
}
else {
if (NCOL(x) > 1)
warning("only the univariate series will be plotted")
if (is.null(y))
xycoords <- xy.coords(.index(x), x[, 1])
}
###The next three lines are the only modifications i made to the function####
plot(xycoords$x, xycoords$y, type = "n", axes = FALSE, ann = FALSE)
rect(par("usr")[1], par("usr")[3], par("usr")[2], par("usr")[4], col ="white")
if(type=="l"){lines(xycoords$x, xycoords$y, ...)}
if (auto.grid) {
abline(v = xycoords$x[ep], col = "grey", lty = 4)
grid(NA, NULL)
}
if (is.OHLC(x) && otype == "candles")
plot.ohlc.candles(x, bar.col = bar.col, candle.col = candle.col,
...)
dots <- list(...)
if (axes) {
if (minor.ticks)
axis(1, at = xycoords$x, labels = FALSE, col = "#BBBBBB",
...)
axis(1, at = xycoords$x[ep], labels = names(ep), las = 1,
lwd = 1, mgp = c(3, 2, 0), ...)
axis(2, ...)
}
box()
if (!"main" %in% names(dots))
title(main = series.title)
do.call("title", list(...))
assign(".plot.xts", recordPlot(), .GlobalEnv)
}
然后你的脚本变成:
library(quantmod)
getSymbols('SPY', from='1998-01-01', to='2011-07-31', adjust=T)
GRAPH_BLUE<-rgb(43/255, 71/255,153/255)
GRAPH_BACKGROUND<-rgb(180/255, 226/255, 244/255)
par(bg=GRAPH_BACKGROUND)
plot.xtsMODIFIED(SPY, col=GRAPH_BLUE)
你得到的错误 (Error in axis(1, at = xycoords$x, labels = FALSE, col = "#BBBBBB", ...) : 形式参数 "col" 与多个实际匹配arguments.
) 也与您之前的脚本一起抛出.这与 plot.xts
使用多个时间参数 ...
并且该参数 col
都对 有效的事实有关axis
和 plot
(或者在我的修改版本中,lines
).如果你想避免它,我看到两个解决方案:要么您希望您的轴与您的线条颜色相同,因此您必须更改以下线条:
The error you're getting (Error in axis(1, at = xycoords$x, labels = FALSE, col = "#BBBBBB", ...) : formal argument "col" matched by multiple actual arguments.
) was also thrown with your previous script. It has to do with the fact that plot.xts
uses several time argument ...
and that argument col
is both valid for axis
and plot
(or here in my modified version, lines
). If you want to avoid it, i see two solutions:
Either you want your axis to be of the same color as your line and therefore you have to change the line that says:
...
axis(1, at = xycoords$x, labels = FALSE, col = "#BBBBBB",
...)
...
进入
...
axis(1, at = xycoords$x, labels = FALSE, ...)
...
或者您希望轴具有原始 plot.xts
的作者想要的颜色,在这种情况下,您需要区分线条的颜色和轴的颜色.
Or you want the axis to have the color intended by the writer of the original plot.xts
in which case you need to differenciate the color of the lines and that of the axis.
plot.xtsMODIFIED<-function (x, y = NULL, type = "l", auto.grid = TRUE, major.ticks = "auto",
minor.ticks = TRUE, major.format = TRUE, bar.col = "grey",
candle.col = "white", ann = TRUE, axes = TRUE,
lcol, ...)
{
...
if(type=="l"){lines(xycoords$x, xycoords$y, lcol, ...)}
...
}
然后在您的实际通话中:
And then in your actual call:
plot.xtsMODIFIED(SPY, lcol=GRAPH_BLUE)
这篇关于更改绘图区背景颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!