考虑此示例
data_frame(mylabel = c('month 18',
'month 19',
'month 20',
'month 21',
'month 22'),
value = c(5,10,-2,2,0),
time = c(1,2,3,4,5)) %>%
ggplot(aes( x= time, y = value, color = mylabel)) +
geom_point(size = 7)
在这里您可以看到变量mylabel
具有自然顺序:18个月在19个月之前,等等。
但是,ggplot
选择的颜色不能保留这种自然顺序。在我的真实数据集中,我有大约50个不同的月份,并且我想使用一种色标来使这种增加更加直观(例如从冷到热)。
我该怎么做? 谢谢!
答案 0 :(得分:3)
您可以使用viridis色标或另一种颜色更好的色标来指示顺序。
为相似的色标提供了多个选项(选项=“ A”至“ D”)。通过direction = -1
我添加了一个步骤,以使订购更好,以防万一月份未正确列出。它可以工作,但是我敢肯定有一种更简单的方法。从名称(必须从char
转换为numeric
)中提取出月号,然后将其分解为适当的顺序。
library(tidyverse)
data_frame(mylabel = paste("month", 1:10),
value = rnorm(length(mylabel)),
time = seq_along(mylabel)) %>%
mutate(month_number = factor(as.numeric(gsub("month ([0-9]+)", "\\1", mylabel)))) %>%
ggplot(aes( x= time, y = value, color = month_number)) +
geom_point(size = 7) +
scale_color_viridis_d(option = "B", direction = -1)
由reprex package(v0.2.1)于2018-11-30创建
答案 1 :(得分:1)
as_factor
中的forcats
函数会按顺序对级别进行排序,而不是首先将所有以“ 1”开头的内容,然后是所有以“ 2”开头的内容,依此类推。有1到12个月的时间。
我制作了不同的数据,只是为了获得完整的月份标签。
library(dplyr)
library(ggplot2)
set.seed(1234)
df <- data_frame(mylabel = paste("month", 1:12),
value = rnorm(12),
time = 1:12)
df_fact <- df %>%
mutate(mylabel = forcats::as_factor(mylabel))
levels(df_fact$mylabel)
#> [1] "month 1" "month 2" "month 3" "month 4" "month 5" "month 6"
#> [7] "month 7" "month 8" "month 9" "month 10" "month 11" "month 12"
ggplot(df_fact, aes(x = time, y = value, color = mylabel)) +
geom_point(size = 7)
您可以进一步调整色阶,使其更适合顺序数据。我经常使用Color Brewer打印机,但也喜欢某些rcartocolor
秤。在这种情况下,尽管ggplot2
(例如scale_color_viridis_d
)随附的Viridis比例尺将进行插值以适合许多等级,但具有12个等级将使许多顺序调色板中可用的颜色数量最大化。
由reprex package(v0.2.1)于2018-11-30创建