我有一个数据框,其中一些变量呈现出很小的相对变化,而另一些则呈现出很大的变化。例如,考虑以下数据框:
df <- data.frame(IDX = 1:10, V1 = runif(10) + 100000, V2 = runif(10))
内容如下:
IDX V1 V2
1 1 100001.0 0.39601382
2 2 100000.1 0.76472032
3 3 100000.1 0.10183021
4 4 100000.2 0.12735142
5 5 100000.8 0.21488898
6 6 100000.1 0.92675265
7 7 100000.5 0.27987290
8 8 100000.6 0.69132304
9 9 100000.5 0.20719782
10 10 100000.8 0.02314787
两个变量的绝对变化相似(V1 为 0.10,V2 为 0.09)。但是,如果我们考虑相对于它们的均值的相对变化,那么 V1 的变化很小,而 V2 的变化则相反:
> var(df$V1) / mean(df$V1)
[1] 1.082472e-06
> var(df$V2) / mean(df$V2)
[1] 0.2617366
当我尝试为这两个变量制作点图并尝试设置 X 比例的限制时,问题就出现了。如果我对每个变量(relation = 'same'
默认设置)使用相同的比例,我会得到以下结果:
这里有用于创建绘图的代码:
library(lattice)
library(reshape2)
df <- melt(df, id.vars = 'IDX')
# approach 1
pl <- dotplot(IDX ~ value | variable, df,
scales = list(x = list(relation = 'same')))
print(pl)
如您所见,V2 的值是如此之小,以至于当对两个面板使用相同的比例时,似乎 V2 值之间没有变化。如果我使每个面板的 X 比例独立,那么我得到以下结果:
在这里,您有生成第二个图的代码:
# approach 2
pl <- dotplot(IDX ~ value | variable, df,
scales = list(x = list(relation = 'free')))
print(pl)
现在的问题是左侧面板的 X 刻度范围从 100000.2 到 100001.0,数据看起来好像有很多变化,而实际上并非如此。
不知何故,我想获得一个图,其中左面板看起来像第一个图中的左面板,而右面板看起来像第二个图中的右面板。我的想法是根据所绘制变量的平均值来定义 X 范围。例如,对于每个面板,X 限制可以从0.9 * mean
到1.1 * mean
。但我不知道在存在多个变量(和面板)的情况下如何做到这一点。