R/ggplot2:坚持定义颜色

R/ggplot2:坚持定义颜色,r,colors,ggplot2,gradient,R,Colors,Ggplot2,Gradient,我是R新手。我的目标是用回归线和置信椭圆创建一个漂亮的xy散点图。我已经设法教自己如何使用ggplot2创建xy图、回归线和圆,但现在我被颜色所困扰 在我的随机数示例中,我有4个数据组,我想更改颜色。我设法用colorbrewer更改了它们,但我不喜欢它们的任何预设,我想定义自己的预设 以下是我在colorbrewer的代码: library(ggplot2) data = read.csv("test.csv") data$type <- factor(data$type, levels

我是R新手。我的目标是用回归线和置信椭圆创建一个漂亮的xy散点图。我已经设法教自己如何使用ggplot2创建xy图、回归线和圆,但现在我被颜色所困扰

在我的随机数示例中,我有4个数据组,我想更改颜色。我设法用colorbrewer更改了它们,但我不喜欢它们的任何预设,我想定义自己的预设

以下是我在colorbrewer的代码:

library(ggplot2)
data = read.csv("test.csv")
data$type <- factor(data$type, levels=c("bbb","ccc","aaa","ddd"))
g = aes(x=alpha, y=beta, color=type, group=type)
p_test <- ggplot(subset(data, id %in% c("a1", "b1"))) +
    geom_point(g) +
    stat_ellipse(g) +
    geom_smooth(g, method=lm, se=FALSE) +
    scale_color_brewer(palette="Set3") +
    expand_limits(x=c(1,11), y=c(1,11)) +
    xlab(expression(paste(italic(blah[p]), " in q ", r^-1))) +
    ylab(expression(paste(lambda, " in K ", l^-2*M^-3))) +
    ggtitle("blahblah") +
    theme(legend.justification=c(0,1), legend.position=c(0,1), legend.title=element_blank())
然后我试着改变颜色。这就是我的问题开始的地方:

1.)首先我想试试彩虹渐变。所以我换了

scale_color_brewer(palette="Set3") +

这给了我一个错误“提供给连续刻度的离散值”。 这是什么意思

2.)接下来,我尝试使用

scale_fill_manual(values=c("red", "blue", "green", "orange")) +
这返回了一个绘图,但没有使用定义的颜色。它们看起来像默认值? 为什么?

最后,我试着定义自己的梯度。我希望它的颜色范围从黄色到红色。所以我用

scale_colour_gradientn(colours=c("yellow", "red")) +
这再次导致了一个错误:离散值提供给连续刻度

然后我放弃了


有人能告诉我我做错了什么吗?为什么colorbrewer在工作,而其他的不工作?

Alistaire已经回答了这个问题。由于美观的
颜色
映射到一个
因子
变量,ggplot期望颜色比例在本质上是离散的(如上面的#2)

所以试试这个:

library(ggplot2)
data = read.csv("test.csv")
data$type <- factor(data$type, levels=c("bbb","ccc","aaa","ddd"))
g = aes(x=alpha, y=beta, color=type, group=type)
p_test <- ggplot(subset(data, id %in% c("a1", "b1"))) +
  geom_point(g) +
  stat_ellipse(g) +
  geom_smooth(g, method=lm, se=FALSE) +
  expand_limits(x=c(1,11), y=c(1,11)) +
  xlab(expression(paste(italic(blah[p]), " in q ", r^-1))) +
  ylab(expression(paste(lambda, " in K ", l^-2*M^-3))) +
  ggtitle("blahblah") +
  theme(legend.justification=c(0,1), legend.position=c(0,1), legend.title=element_blank())


# These work fine
p_test + scale_color_manual(values = rainbow(4))
p_test + scale_color_manual(values = c("red", "blue", "green", "orange"))
p_test + scale_color_manual(values = RColorBrewer::brewer.pal(4, "Set3"))
p_test + scale_color_discrete(h = c(0,360), c = 100, l = 50)

# This wont work
p_test + scale_color_gradient(low = "blue", high = "red")
库(ggplot2)
数据=read.csv(“test.csv”)

您想要的数据$type#2,但它应该是
scale\u color\u manual
,而不是
scale\u fill\u manual
,因为您试图设置的是颜色,而不是填充。渐变不起作用,因为您正在向它们传递分类数据(
类型
),因此没有用于定义渐变的数字。不相关:您只需在
ggplot
中设置一次映射(
aes
),其余的都将继承,除非您使用新映射进行覆盖。
scale_colour_gradientn(colours=c("yellow", "red")) +
library(ggplot2)
data = read.csv("test.csv")
data$type <- factor(data$type, levels=c("bbb","ccc","aaa","ddd"))
g = aes(x=alpha, y=beta, color=type, group=type)
p_test <- ggplot(subset(data, id %in% c("a1", "b1"))) +
  geom_point(g) +
  stat_ellipse(g) +
  geom_smooth(g, method=lm, se=FALSE) +
  expand_limits(x=c(1,11), y=c(1,11)) +
  xlab(expression(paste(italic(blah[p]), " in q ", r^-1))) +
  ylab(expression(paste(lambda, " in K ", l^-2*M^-3))) +
  ggtitle("blahblah") +
  theme(legend.justification=c(0,1), legend.position=c(0,1), legend.title=element_blank())


# These work fine
p_test + scale_color_manual(values = rainbow(4))
p_test + scale_color_manual(values = c("red", "blue", "green", "orange"))
p_test + scale_color_manual(values = RColorBrewer::brewer.pal(4, "Set3"))
p_test + scale_color_discrete(h = c(0,360), c = 100, l = 50)

# This wont work
p_test + scale_color_gradient(low = "blue", high = "red")