【问题标题】:secondary axis of an indexed variable & same axis for multiple plots produced in a loop - in ggplot2索引变量的次轴和循环中生成的多个图的相同轴 - 在ggplot2中
【发布时间】:2018-04-04 03:56:54
【问题描述】:

我有 12 个面板的月度数据。每个面板的 x 轴是一个唯一的 id,它结合了两个变量(Vc 和 Vw)。每个面板的 y 轴是一个唯一的 id,它结合了两个变量(Rc 和 Rw)。 Vc 和 Vw (VGroupid) VGroupid 的组合数向量的长度每个月都相同。 Rc 和 Rw (RGroupid) 组合向量的长度每月变化。每个 VGroupid 选择多个 RGroupid 中的每一个的结果将显示为多个好处之一(0、13、26 或 36)。这些好处通过颜色来区分。每个月的数据都是在 for 循环中创建的。每个月的结果相互附加到一个列表中。然后将列表融合为四个类别,“VGroupid”、“变量”(即 RGroupid)、“值”(即我前面提到的好处)和“月”。

例如,

Vc=c(0,10e6,2*10e6) 
Vw=c(0,10e6,2*10e6)
VGroupid =c(1,2,3,4,5,6,7,8,9) such that 
VcinVGroupid = c(0,0,0,10e6,10e6,10e6,2*10e6,2*10e6,2*10e6) 
VwinVGroupid = c(0,10e6,2*10e6,0,10e6,2*10e6,0,10e6,2*10e6)
[So VGroupid==1 is Vc==0 and Vw==0]
Rc_Jun=c(0,10e6,2*10e6)
Rw_Jun=c(0,10e6,2*10e6)
RGroupid_Jun=seq(1,9,1)
Rc_May=c(0,10e6,2*10e6)
Rw_May=c(0,10e6)
Rc_April=c(0,10e6)
Rw_April={} (empty set, no options)

An extremely small sample of dplot=
  VGroupid variable value    month
          1        2    36     April
          2        2    36     April
          1        1    36     April
          2        1    36     April
          3        2    36     April
          1        2    36     April
         6       2     0       May
         5       3     0       May
         5       4     13       May
         5       5     26       May
         1        1     0      June
         2        1     36      June
         6        1     26      June
         1        2     13      June
         9        1     0      June
         8        9     36      June
         6        8     26      June
         7        7     13      June

ggplot(dplot, aes(VGroupid, variable, group=factor(month), color=factor(value)), size=3)+ 
  geom_point()   +
  facet_grid(. ~month)

我在 ggplot2 中使用 facet_grid 显示了 12 个图的数据。它看起来很漂亮。标签需要帮助,缩放需要帮助。问题: 1.如何将每个绘图的 x 轴标签替换为 2 个 x 轴,一个用于组成 VGroupid 的两个变量中的每一个。因此,我不想使用 VGroupid,而是想实际显示 Vc 和 Vw 的值。我需要对 y 轴执行相同的操作,以将 RGroupid 替换为实际的 Rc 和 Rw 值。只有一个 ggplot2 我可以为此使用 annotate 函数,但此函数不适用于带有 facet_grid 的多个绘图。 2.每个图有不同长度的RGroupid(每个图的y轴长度不一样)。如何使用不同的 y 轴显示每个图?

对于问题 #1:只有一个月的一个 ggplot2,我可以使用以下代码来创建轴,但这不能转移到 12 绘图面板: #轴

annotate("text", x=-0.25, y=seq(1,length(Rwdecs), 1), label=Rc, color="blue", 
    size=2.25)+ #http://ggplot2.tidyverse.org/reference/annotate.html
annotate("text", x=Vwscale, y=0.5, label=Vc, color="blue", size=2.25)+
  if(Rw>0){scale_y_discrete(labels=Rwdecs)
  } else{theme(axis.title.y=element_blank(),
               axis.text.y=element_blank(),
               axis.ticks.y=element_blank())}+
  if(Rw>0){scale_x_discrete(labels=Vw)
  } else{theme(axis.title.x=element_blank(),
               axis.text.x=element_blank(),
               axis.ticks.x=element_blank())}

【问题讨论】:

标签: r ggplot2


【解决方案1】:

解决方案:

问题 1 答案:我猜 ggplot2 没有声明辅助轴,除非辅助轴是主轴的函数 - 这通常是有道理的,但在我的情况下,因为辅助轴 不是 一个函数的初级。两个轴结合起来形成一个索引。索引(例如,同一点有两个 y 轴标识符)。遗憾的是,辅助轴功能不适用于 R 绘图。解决方案:我连接了主轴上的索引。文字看起来很草率,但它有效:

p+scale_y_continuous(breaks=DisplaysR[,3],labels=paste(DisplaysR[,1],DisplaysR[,2],sep=","))

Question2 答案:我首先发现了 ggplot2 备忘单的 2018 R studio 版本来回答我的问题:rstudio.com/resources/cheatsheets 将我的数据从因子转换为数字:stackoverflow.com/questions/29278153/...,所以所有y 轴观测值在同一尺度上。有了这个,所有数据都在多图中以相同的比例显示,我最初使用 scale_y_continuous(limits= min and max of RGroupid) 进行限制 - 但后来发现设置中断和标签并使用 scale_y_continuous 命令实际上更好:

p+scale_y_continuous(breaks=DisplaysR[,3],labels=paste(DisplaysR[,1],DisplaysR[,2],sep=",")) + #GlobalRoptions[2,]) + scale_x_continuous(breaks=seq(1,15,1), labels=paste(Voptions[,1], Voptions[,2], sep=","))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 2019-09-19
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 2019-02-05
    • 2022-11-20
    相关资源
    最近更新 更多