如何在ggplot2中为离散变量创建渐变颜色?

Jak*_*her 14 r ggplot2

我有大约100个有序类别的数据.我想将每个类别分别绘制为一条线,线条颜色范围从低值(比如蓝色)到高值(比如红色).

这是一些示例数据和一个图.

# Example data: normal CDFs

library(ggplot2)

category <- 1:100
X <- seq(0, 1, by = .1)
df <- data.frame(expand.grid(category, X))
names(df) <- c("category", "X")
df <- within(df, {
  Y <- pnorm(X, mean = category / 100)
  category <- factor(category)
  })

# Plot with ggplot
qplot(data = df, x = X, y = Y, color = category, geom = "line")
Run Code Online (Sandbox Code Playgroud)

这会产生漂亮的彩虹(下图)在此输入图像描述

但我宁愿从蓝色到红色渐变.我有什么想法可以做到这一点?

MrF*_*ick 18

ggplot的默认渐变函数需要连续缩放.最简单的解决方法是转换为像@Roland建议的连续性.您还可以指定所需的任何颜色比例scale_color_manual.你可以得到ggplot可以使用的颜色列表

cc <- scales::seq_gradient_pal("blue", "red", "Lab")(seq(0,1,length.out=100))
Run Code Online (Sandbox Code Playgroud)

这将返回100种颜色,从蓝色到红色.然后你可以在你的情节中使用它们

qplot(data = df, x = X, y = Y, color = category, geom = "line") +     
    scale_colour_manual(values=cc)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Rol*_*and 11

由于离散的图例无论如何都是无用的,你可以使用连续的色标:

ggplot(data = df, aes(x = X, y = Y, color = as.integer(category), group = category)) +
  geom_line() +
  scale_colour_gradient(name = "category", 
                        low = "blue", high = "red")
Run Code Online (Sandbox Code Playgroud)

结果情节

  • 谢谢,但在真实数据中,我正在处理日期。我会看看我是否可以使连续的图例与日期值看起来合理。 (2认同)