2017-02-02 27 views
0

我的头越来越痛,因为我感到非常激动。正在初始化和自定义一个自动绘图的r-project对象

我有一个时间序列,我已经转换成一个xts对象瓦特/ 7个变量。现在我试图在同一个图表上绘制其中的4个价格指数。我使用autoplot(来自ggfortify包)初始化图形,这是麻烦开始的地方。

自动绘图似乎不工作,除非我给它至少一个变量绘图。这很好,但我想要的变量 - 它的颜色和线型 - 的两个自定义似乎没有效果。

但是,一旦我用这种方式创建情节,我通过添加geom_lines添加其他3个变量时遇到了一些麻烦。这里有一些代码是这样的:

p <- autoplot(foo.xts,xlab="Year", 
     ylab="Price Index", 
     columns="Variable1",linetype=4) # the linetype accomplishes nothing 
p <- p + geom_line(aes(y="Variable2", color="green", linetype="solid" 
     # etc. for the other 2 variables 
p # The 3 added variables do get the selected colors & line types. 

但是我怎样才能为第一个变量定制行?

然后还有另一个问题,我不能让图例出现。我试图这样做:

p <- p + scale_color_discrete(
    name="Price Indices", 
    breaks=c("Variable1", "Variable2", "Variable3", "Variable4"), 
    labels=c("Index 1", "Index 2", "Index 3", "Index 4")) 

这似乎什么都没有做到。

我要添加的一件事是,在我尝试让图例工作的各种实验中,我有时会得到两组键:一个用于颜色,一个用于线型。这显然不是我所追求的。

如果有人能帮助我,我会永远在你的债务!

+0

如果您通过添加样本数据来创建示例[reproducible](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),它会更容易帮助您所以我们可以自己运行代码。 – MrFlick

+0

@MrFlick是的,我错了。我将自动绘图与基本R时间序列中的另一个函数混淆。 'autoplot'实际上是ggplot2和xts提供的泛型,实际上就像你所说的那样调用'autoplot.zoo'。我删除了我的评论,以免造成任何混淆。 – hdkrgr

+0

我没有包含示例数据,因为我使用的数据是专有的。我觉得有太多的机会可能因为偏离原始数据而意外改变了情况。 – Gnosos

回答

-1

我昨天已经离开电脑,当我在晚上回来时修复了问题。方法如下:

  1. 停止使用自动绘图。这是手持式的经典案例,它将你抛向悬崖。换句话说,它会以难以(不可能)的方式自动格式化绘图。相反,ggplot创建了初始情节。

  2. 由于我正在绘制一系列图,将所有共享特征移至单独的序言部分。本节创建一个基本图,设置x轴变量(观察日期),标记x轴并格式化其刻度标记。它还设置了标准化的颜色,线条样式和形状,供所有“制作”图使用。

  3. 要设置标准化元素,它使用scale_color_manual等。除了那些独特于其特定美学属性的元素之外,每个元素必须在所有方面都相同。例如,scale_color_manual使用类似“red”的值,而scale_linetype_manual使用类似“solid”的值。每个手动设置都包含以下元素:legend.title *,values,labels和guide = guide_legend()*。 (标有*的项目必须相同,否则每个图标都会有不同的图例。)对于每个图形,实际图例标题首先存储在变量legend.title中,然后用于所有手动比例设置。这样手动设置可以移动到公共部分,但每个图都有自己独特的图例标题。

3A。其实,我错了。我在想LaTeX,大多数事情都是在执行时出现的。因此,稍后通过更改legend.title的值可以更改开始处的scale_color_manual语句。但是在R中,事情会按顺序进行评估,并更改图例。执行scale_color_manual语句后的标题将不起作用。我通过在序言中定义几个变量(例如,使用我使用的颜色)来解决此问题,然后在各种source_x_manual语句中使用这些变量。这样,唯一改变的就是图例标题。

  1. 然后,每个生产图开始复制基本图,标记y轴,然后添加它所需的几何对象。

这种方法有几个优点。 1)它模块化绘图,使问题更容易隔离和解决,并且序言部分中解决的大部分问题都解决了所有的图。 2)标准化绘图,确保其共同特征的格式相同。 3)它将每个生产情节减少到几个语句;因为这是每个情节的独特部分,所以创造一种新的情节风格变得相对容易。 4)由autoplot增加的值变得很小,因为这种方法分离了前导码中的共享元素,通过隔离可重复使用的代码和前导码进行补偿,一旦调试完成,可以进行更细粒度的定制。

如果您有任何问题,请随时询问。