R 具有离散和连续变量交互作用的ggplot2图例

R 具有离散和连续变量交互作用的ggplot2图例,r,ggplot2,colors,legend,R,Ggplot2,Colors,Legend,我在为以下数据集绘制美观的图例时遇到了一个一般性问题 df1 <- data.frame("ShearRate" = rep(c(1,5,10), rep(5,3)), "Time" = seq(1,15,1), "Viscosity" = c(runif(5,15,20), runif(5,10,15), runif(5,5,10)), "Test&q

我在为以下数据集绘制美观的图例时遇到了一个一般性问题

df1 <- data.frame("ShearRate" = rep(c(1,5,10), rep(5,3)), "Time" = seq(1,15,1),
                 "Viscosity" = c(runif(5,15,20), runif(5,10,15), runif(5,5,10)),
                 "Test" = "Test1", "Interval" = rep(c("Interval1", "Interval2", "Interval3"),rep(5,3)))
df2 <- data.frame("ShearRate" = rep(c(1,5,10), rep(5,3)), "Time" = seq(1,15,1),
                 "Viscosity" = c(runif(5,15,20), runif(5,10,15), runif(5,5,10)),
                 "Test" = "Test2", "Interval" = rep(c("Interval1", "Interval2", "Interval3"),rep(5,3)))
df <- full_join(df1,df2)
rm(df1,df2)
df$Test <- as.factor(df$Test)
df$Interval <- as.factor(df$Interval)
这对我来说很好:

我需要使用变量
Test
与变量
ShearRate
的交互作用来实现此绘图。但我真的不满意它产生的传奇。事实上,我很想有一个测试的传奇。类似于红色:Test1和蓝色:Test2。还有一个带有色调的图例,它给出了连续剪切速率的强度

我希望我的问题很清楚,我的MWE能帮助你理解我的问题


致以最良好的祝愿

如果希望根据
Test
指定颜色,我不太清楚您对
ShearRate
的值使用不同的色调是什么意思。我想你的意思是当
Test==“Test2”
时,剪切速率有一个蓝色的梯度,当
Test==“Test1”
时有一个红色的梯度。这在ggplot中本机是不可能的,但您可以使用
ggnewscale

库(ggnewscale)
ggplot(映射=aes(时间、粘度))+
geom_线(数据=df[df$Test==“Test1”,],
aes(颜色=剪切速率,组=因子(剪切速率)),
stat=“平滑”,
show.legend=TRUE,size=1)+
几何点(数据=df[df$Test==“Test1”,],
aes(形状=间隔,颜色=剪切速率))+
缩放颜色渐变(低=“红色4”,高=“番茄”,
name=“Test1:\n剪切速率”)+
ggnewscale::新的缩放颜色()+
geom_线(数据=df[df$Test==“Test2”,],
aes(颜色=剪切速率,组=因子(剪切速率)),
stat=“平滑”,
show.legend=TRUE,size=1)+
几何点(数据=df[df$Test==“Test2”,],
aes(形状=间隔,颜色=剪切速率))+
缩放颜色渐变(低=“蓝色4”,高=“深蓝”,
name=“Test2:\n剪切速率”)+
实验室(x=“时间[s]”,y=“粘度[mPas]”)+
辅助线(alpha=guide\u none(),shape=guide\u none())+
主题_bw()+
主题(legend.direction=“水平”)

这正是我想要的,我不知道那个包裹!谢谢
df %>%
  ggplot(aes(Time, Viscosity, col = interaction(Test,factor(ShearRate), sep="/Shear Rate [mPas]: ")))+
  theme_bw() +
  geom_smooth(show.legend = T) + 
  scale_colour_manual(values = c("red3", "blue3", "red2", "blue2", "red", "blue")) +
  geom_point(aes(shape = Interval)) +
  labs(x = "Time [s]", y = "Viscosity [mPas]", col = "Test ID")