我有一个按因子分组的xyplot。我为16个不同的站点绘制了盐度(AvgSal = Y)与时间(DayN = X),站点是因子(SiteCode)。我希望所有的网站图都堆叠在一起,所以我将布局设置为一列16行。
第一期:我想删除仅包含SiteCode标签的每个地块上方的条带,因为它占用了大量空间。相反,我可以引入带有SiteCode名称的第二列,或者在与绘图相同的条带中引入图例。谁能告诉我如何删除标签条并以不同的方式引入标签?
以下是代码:
样本数据
zz <- "SiteCode DayN AvgSal
1 CC 157 29.25933
2 CC 184 29.68447
3 DW 160 26.47328
4 DW 190 29.07192
5 FP 157 30.40344
6 FP 184 30.58842
7 IN 157 30.25319
8 IN 184 29.20716
9 IP 156 29.09548
10 IP 187 27.86887
11 LB 162 27.58603
12 LB 191 28.86910
13 LR 160 28.06035
14 LR 190 29.52723
15 PB 159 30.10903
16 PB 188 29.46113
17 PG 161 29.67765
18 PG 189 28.90864
19 SA 162 23.23362
20 SA 190 26.96549
21 SH 156 24.86752
22 SH 187 23.12184
23 SP 161 18.95347
24 SP 189 19.16433
25 VC 162 29.49714
26 VC 186 29.66493
27 WP 157 27.33631
28 WP 183 27.18465
29 YB 157 30.50193
30 YB 183 30.49824
31 ZZ 159 30.14175
32 ZZ 186 29.44860"
Data <- read.table(text=zz, header = TRUE)
xyplot(AvgSal~DayN | factor(SiteCode),
layout = c(1, 16),
xlab = "Time (Day of the year)",
ylab = "Average Salinity (PSU)",
strip = function(bg = 'white', ...) strip.default(bg = 'white', ...),
data = Data, type = c("a","p"))
第二个问题:条带按字母顺序按SiteCode排序,或按原始顺序将它们输入csv数据文件。我想订购它们从最高到最低的平均盐度,但我不知道如何实现这一目标。有人可以帮忙吗?
我尝试使用order ()
来更改数据布局,以便在运行绘图之前按升盐度进行排序,但即使我删除了rownames,这似乎也不起作用。
我还尝试了How to change the order of the panels in simple Lattice graphs中的解决方案,通过分配设置级别,即
levels(Data$SiteCode) <- c("SP", "SA", "SH", "LB", "DW",
"LR", "PG", "VC", "ZZ", "PB",
"WP", "IP", "IN", "CC", "FP", "YB")
这似乎改变了每个面板上方的标签,但它没有改变相应的图,留下了错误标签的图。如果我想为大量变量执行此过程,它似乎也是一种低效的方法。
任何帮助都将非常感谢!干杯:)
答案 0 :(得分:0)
事后看来,解决方案似乎总是如此简单。
问题1:我必须在factor命令中使用levels()
和reorder()
,其中X =我想订购SiteCode的数字因子。
xyplot(AvgSal ~ DayN | factor(SiteCode, levels(reorder(SiteCode, X),
问题2:一旦我知道自己在做什么,结果就变得非常简单了。只是不得不关掉&#39;剥离,完全摆脱标题条。
strip = FALSE
另外,我决定在左边垂直对齐条带会很好:
strip = FALSE,
strip.left = strip.custom(horizontal = FALSE)