R 存储GGPlot列表的轴名称的最佳方法是什么?

R 存储GGPlot列表的轴名称的最佳方法是什么?,r,list,ggplot2,R,List,Ggplot2,我创建了一个大数据框(>100列) 显然,这是一个问题,因为除了查看最终的绘图外,我永远无法确定是否为正确的绘图指定了正确的y轴。如果我要修改订单,那就完全不同了 如何更好地设置名称?也许在数据帧本身中,我可以确定顺序?您可以使用查找表和匹配功能。这可确保所需的y轴标签始终用于给定的数据列。下面是一个例子: 让我们创建一个查找表,其中包含要用于所有可能的列名的y标签。在lookup中,var\u name是数据框s的可能列名y_lab是我们要在绘图中使用的相应y轴标签 lookup = data

我创建了一个大数据框(>100列)

显然,这是一个问题,因为除了查看最终的绘图外,我永远无法确定是否为正确的绘图指定了正确的y轴。如果我要修改订单,那就完全不同了


如何更好地设置名称?也许在数据帧本身中,我可以确定顺序?

您可以使用查找表和
匹配功能。这可确保所需的y轴标签始终用于给定的数据列。下面是一个例子:

让我们创建一个查找表,其中包含要用于所有可能的列名的y标签。在
lookup
中,
var\u name
是数据框
s
的可能列名
y_lab
是我们要在绘图中使用的相应y轴标签

lookup = data.frame(var_names=c("wm","hr","time","grp", 'cm'), 
                    y_lab=c("W m-2", "Hour", "Time", "Group","Centimeters"))
现在,当您绘制数据时,使用
match
为绘图中给定的y列识别正确的
lookup$y_lab
。在下面的示例中,我修改了您的代码示例,直接使用数据框列名作为循环变量。请注意,使用
match
功能可以为
yvar
的当前值获取正确的
y_lab

for (yvar in names(s)[-1]) {
  p = ggplot(s, aes_string(x = "x1", y = yvar)) +
    geom_line() +
    ylab(lookup$y_lab[match(yvar, lookup$var_names)]) +
    ggtitle(yvar)
  plot_list[[yvar]] = p
}
另一个选项是创建所有y值的单面图。那会是这样的:

library(tidyr)

names(s)[-1] = lookup$y_lab[match(names(s)[-1], lookup$var_names)]

ggplot(gather(s, key, value, -x1), aes(x = x1, y = value)) +
  geom_line() +
  facet_wrap(~ key)

是否有特定的
var\u列表
值始终与特定的
y\u名称
匹配?例如,是否有像
wm
这样的列名,您总是希望在绘图中转换为
wm-2
?如果是这样的话,您可以创建一个查找表,然后使用联接将相应的
y轴
标签匹配到每个列名,而无需知道顺序。如果您提供一个小的数据样本和与列名匹配的y轴标签,将更容易为您提供帮助。
Var\u list
只是列的名称。并且每一列都与唯一的
y\u名称关联。有些可能没有任何y_名称,因为它们可能是没有单位的分数。我会尽量提供一些数据,因为它们很大。但如果你能用任何示例数据来详细说明,那也太好了!我补充了一个答案。事实证明,没有必要加入。我刚刚使用了
match
函数来获得与每个绘图使用的y列对应的
y\u lab
。@eipi10非常感谢!这很有帮助。但是它仍然不能帮助我在代码中的变量旁边设置单位,这使得代码变得笨拙。太棒了!Thank.TBH,它仍然不能完全解决问题,因为我们没有在
查找
中的
变量
名称旁边分配
单位
。因此,当我有数百个变量时,如果不以表格格式在RStudio中查找表,就很难进行更改。我把这个问题留给大家,看能否找到解决办法。但是谢谢!我想知道是否有一种方法可以构建数据帧
行方式
而不是
列方式
?这就解决了问题。你能用一个示例数据框和期望的输出更新你的问题吗?那会让我更容易理解你想做什么。
lookup = data.frame(var_names=c("wm","hr","time","grp", 'cm'), 
                    y_lab=c("W m-2", "Hour", "Time", "Group","Centimeters"))
  var_names       y_lab
1        wm       W m-2
2        hr        Hour
3      time        Time
4       grp       Group
5        cm Centimeters
for (yvar in names(s)[-1]) {
  p = ggplot(s, aes_string(x = "x1", y = yvar)) +
    geom_line() +
    ylab(lookup$y_lab[match(yvar, lookup$var_names)]) +
    ggtitle(yvar)
  plot_list[[yvar]] = p
}
library(tidyr)

names(s)[-1] = lookup$y_lab[match(names(s)[-1], lookup$var_names)]

ggplot(gather(s, key, value, -x1), aes(x = x1, y = value)) +
  geom_line() +
  facet_wrap(~ key)