我有一个看起来像这样的数据:
height <- c(1,2,3,4,2,4,6,8)
weight <- c(12,13,14,15,22,23,24,25)
person <- c("Jack","Jim","Jill","Tess","Jack","Jim","Jill","Tess")
set <- c(1,1,1,1,2,2,2,2)
dat <- data.frame(set,person,height,weight)
我试图绘制与同一x轴(人)的曲线图,以及使用2个不同的y轴(重量和高度) twoord.plot
从功能plotrix
包。 不过,我不知道该怎么端面的情节像GGPLOT2。
例如,如果我能地块在GGPLOT2覆盖,我的代码看起来是这样的:
ggplot(data = dat, aes(x = person, y = weight)) +
geom_point(color = "red") + facet_wrap(~set, scales="free")
#And similarly have the height on the other axis.
如何在twoord.plot实现这个任何想法()?
我觉得这真是情节混乱,但这似乎或多或少什么plotrix::twoord.plot
呢,所以让我知道这是你脑子里想的是什么。
在GGPLOT2,第二轴必须基于所述第一轴的变换。 所以,我们首先变换绘制的高度值,以使他们在相同范围内的权重值(所以他们会根据重量的图的y范围内出现)。 然后我们做逆变换到第二y轴的刻度(使得Y轴比例将对应于该数据的实际高度值)。
ggplot(dat, aes(person)) +
geom_point(aes(y=weight), colour="blue") +
geom_point(aes(y=height/mean(height/weight)), colour="red", shape=17) +
scale_y_continuous(sec.axis=sec_axis(~ . * mean(dat$height/dat$weight),
breaks=seq(0,max(dat$height),1),
name="height")) +
theme_classic() +
theme(axis.text.y.right=element_text(colour="red"),
axis.text.y=element_text(colour="blue"),
axis.title.y.right=element_text(colour="red"),
axis.title.y=element_text(colour="blue"))
这似乎更直观的我,特别是如果每个人的测量(隐含)在时间排序:
ggplot(dat, aes(weight, height, label=person, group=person)) +
geom_line(colour="grey70") +
geom_text()
根据该意见,好像真正的问题是如何利用以实现适当的情节ggplot2
,而不是如何强制plotrix
做一些它不能做。
二级轴气馁ggplot2
,因为他们是误导性的。 眼被试探来比较没有可比性值,特别是当线交叉。 出于这个原因, sec_axis
被限制为其中一个变量是另一个的直接转化情况。
我认为这将是更好地集中使用身高和体重的面,和颜色。 这清楚地显示每个变量的变化,每个人,在各组的(我认为是类似的时间点)。 关键是你要考虑你正在努力突出并创建相应的图表数据集的哪些方面。
一对夫妇的例子。 首先,小面的身高/体重,颜色由集:
library(tidyr)
library(ggplot2)
dat %>%
gather(var, value, -(1:2)) %>%
ggplot(aes(person, value)) +
geom_point(aes(color = factor(set))) +
facet_wrap(~var, scales = "free_y")
或由人的色彩,情节设置与每个变量。 我会忍不住在这种情况下使用的线路:
dat %>%
gather(var, value, -(1:2)) %>%
ggplot(aes(factor(set), value)) +
geom_line(aes(color = person, group = person)) +
facet_wrap(~var, scales = "free_y")