0

我的头因为我撞得太厉害而感到疼痛。

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

除非我给它至少一个要绘制的变量,否则 Autoplot 似乎不起作用。这很好,但是我想要的变量的两种自定义——它的颜色和线型——似乎没有效果。

但是,一旦我以这种方式创建了绘图,通过添加 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"))

这似乎一事无成。

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

如果有人能帮我解决这个问题,我将永远欠你的债!

4

1 回答 1

-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,大多数东西都是在执行时出现的地方进行评估的。因此,开始时的 scale_color_manual 语句可以在稍后仅通过更改 legend.title 的值来更改。但是在 R 中,事物是按顺序评估的,在执行 scale_color_manual 语句后更改 legend.title 将没有效果。我通过在序言中定义几个变量(例如,一个具有我正在使用的颜色的变量)来解决这个问题,然后在各种 source_x_manual 语句中使用这些变量。这样,唯一改变的是图例标题。

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

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

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

于 2017-02-03T15:19:56.740 回答