跟进this question,您将如何修改等高线图图例的颜色?
以下是如何生成情节:
x <- rep(seq(0.01, 0.1, length.out = 50), 50)
y <- rep(seq(0.01, 0.1, length.out = 50), each = 50)
z <- 1 / (x^2 + y^2)
my.data <- data.frame(x, y, z)
ggplot(my.data, aes(x = x, y = y, fill = z)) +
geom_tile() +
scale_fill_gradientn(colours = c("blue",
"cyan",
"green",
"yellow",
"orange",
"red"),
values = rescale(c(0.3, 1, 2, 5, 10, 20, 35))) +
scale_x_continuous(expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0))
结果如下:
我希望能够手动设置颜色(我知道如何为休息时间做这些),以便它更具可读性。在上面的示例中,您不能多说较低的值,这可能是最感兴趣的。蓝色甚至不会出现在图例中。
答案 0 :(得分:0)
看起来你的values=...
搞砸了。阅读文档并尝试使用values
函数,看起来通过指定范围,您可以为每种颜色提供更少/更多的权重。我认为您遇到的问题是颜色仍然在图例中,但由于values
调用它们被“加权”得太少,因此它们不可见(即它们在那里,但他们是传说中的一小部分。)
如果您尝试为values=...
执行极值,则可以尝试此操作。我在这个例子中使用100:
ggplot(my.data) +
geom_tile(aes(x = x, y = y, fill = z)) +
scale_fill_gradientn(colours = c("blue",
"cyan",
"green",
"yellow",
"orange",
"red"),
values = rescale(c(0.3, 1, 2, 5, 10, 20, 100))) +
scale_x_continuous(expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0))
你可以看到,基本上整个传说都被红色接管,而且剧情中还有更多的红色。
要解决您的问题,您可以尝试不使用此类values=...
的内容:
ggplot(my.data) +
geom_tile(aes(x = x, y = y, fill = z)) +
scale_fill_gradientn(colours = c("blue",
"cyan",
"green",
"yellow",
"orange",
"red"))+
scale_x_continuous(expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0))
然后你可以看到图例中有蓝色,但你的情节中有更多的蓝色。这是您数据的工件。如果您尝试quantile(my.data$z,c(seq(0,1,by=0.05)))
,您可以看到第95百分位数是~800,最大值是5000.正如您在图例中看到的那样,1000以下的值正在填充蓝色(这是您数据的95%!)
如果你希望它的蓝色较少,你可能会再次使用values
(我不推荐 - 你可能想要准确地表示你的数据)。像这样:
ggplot(my.data) +
geom_tile(aes(x = x, y = y, fill = z)) +
scale_fill_gradientn(colours = c("blue",
"cyan",
"green",
"yellow",
"orange",
"red"),
values =rescale(c(0.3, 3, 4, 5, 10, 20, 35))) +
scale_x_continuous(expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0))
或者,我认为这是一个更好的解决方案,你可以摆脱你的异常值,所以你的情节不是倾斜的。现在,没有values
操作的ggplot函数可以准确地表示您的数据。