我有一个这样创建的多面面板:
totalplot <- ggplot(mtcars,
aes(x=mpg,y=hp,color=gear)) +
geom_line() +
ggtitle("hp vs mpg") +
xlab("mpg") + ylab("hp") +
theme(plot.title = element_text(lineheight=.8, face="bold",
size = 20)) +
theme(text = element_text(size=15))
totalplot + facet_grid(gear ~ .,scales="free_y") # create faceted panel
但是对于每个面板,我希望有两行,一行用于mtcars$vs==1
,另一行用于mtcars$vs==0
。
我尝试使用aes(x=mpg,y=hp,color=gear,interaction=(gear,vs))
,但这只是给我带来奇怪的图表。
答案 0 :(得分:1)
您可以通过使用group
中的geom_line()
美学来实现这一目的,或者为了获得更好的可读性,将其直接映射到linetype
(作为一个因素):
library(ggplot2)
totalplot <- ggplot(mtcars, aes(x=mpg, y=hp, color=as.factor(gear))) +
geom_line(aes(linetype=as.factor(vs))) +
ggtitle("hp vs mpg") +
xlab("mpg") + ylab("hp") +
theme(plot.title = element_text(lineheight=.8, face="bold",
size = 20)) +
theme(text = element_text(size=15))
totalplot + facet_grid(gear ~ .,scales="free_y") # create faceted panel
mtcars
并没有给您最好的例子,因为并非gear
的每个级别都具有vs
的两个级别。这是一个使用diamonds
的类似示例,它仅包含更多数据:
library(dplyr)
library(ggplot2)
df <- select(diamonds, carat, clarity, cut, price) %>%
filter(clarity==c("SI2", "VS2", "VVS2")) %>%
filter(cut==c("Fair", "Ideal"))
totalplot <- ggplot(df, aes(x=carat, y=price, colour=as.factor(clarity))) +
geom_line(aes(group=cut, linetype=cut)) +
ggtitle("hp vs mpg") +
xlab("mpg") + ylab("hp") +
theme(plot.title = element_text(lineheight=.8, face="bold",
size = 20)) +
theme(text = element_text(size=15)) +
labs(colour="Clarity", linetype="Cut") +
facet_grid(clarity ~ .,scales="free_y") # create faceted panel
totalplot