r - 分面面板:组内每个组的线条
问题描述
我有一个像这样创建的多面面板:
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
但是对于每个面板,我希望有两条线,一条 for mtcars$vs==1
,另一条 for mtcars$vs==0
。
我尝试过使用aes(x=mpg,y=hp,color=gear,interaction=(gear,vs))
,但它只是给了我奇怪的图表。
解决方案
您可以通过使用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
推荐阅读
- c++ - 如何使clang不能替代#define宏
- javascript - 是否可以从谷歌分析接收动态数据?
- c++ - 在 C++ 中遍历 char 数组的位
- java - Javafx FXML 不兼容
- c++ - 错误 C2893 无法专门化函数模板'未知类型 std::equal_to
::运算符 ()(_Ty1 &&,_Ty2 &&) noexcept( ) 常量' - python - 如何仅提取括号之间的字符串组件?
- neural-network - 如何编写自定义 CrossEntropyLoss
- java - 如何使用 react-native 阻止特定的互联网连接
- javascript - JSON.parse 中位置 0 的 JSON 中的意外标记 a
- php - 在两个不同的网站上对相同内容的相同请求