将日期映射到 ggplot2 中的 viridis 色标
Mapping dates to the viridis colour scale in ggplot2
我正在尝试 将日期映射到 ggplot2 中的 viridis
色标 。默认的 ggplot
色标适用于日期。但是我在将它们映射到 viridis
比例时遇到了问题,出现有关 'origin' 未提供给 as.Date.numeric()
的错误(尝试使用 ggplot2::scale_color_gradient()
时出现类似错误)。请参阅下面的 reprex。
关于最有效的排序方法有什么建议吗?
### data
df <- structure(list(height = c(182.87, 179.12, 169.15, 175.66, 164.47,
158.27, 161.69, 165.84, 181.32, 167.37, 160.06, 166.48, 175.39,
164.7, 163.79, 181.13, 169.24, 176.22, 174.09, 180.11, 179.24,
161.92, 169.85, 160.57, 168.24, 177.75, 183.21, 167.75, 181.15,
181.56, 160.03, 165.62, 181.64, 159.67, 177.03, 163.35, 175.21,
160.8, 166.46, 157.95, 180.61, 159.52, 163.01, 165.8, 170.03,
157.16, 164.58, 163.47, 185.43, 165.34, 163.45, 163.97, 161.38,
160.09, 178.64, 159.78, 161.57, 161.83, 169.66, 166.84, 159.32,
170.51, 161.84, 171.41, 166.75, 166.19, 169.16, 157.01, 167.51,
160.47, 162.33, 175.67, 174.25, 158.94, 172.72, 159.23, 176.54,
184.34, 163.94, 160.09, 162.32, 162.59, 171.94, 158.07, 158.35,
162.18, 159.38, 171.45, 163.17, 183.1, 177.14, 171.08, 159.33,
185.43, 162.65, 159.44, 164.11, 159.13, 160.58, 164.88), weight = c(76.57,
80.43, 75.48, 94.54, 71.78, 69.9, 68.85, 70.44, 76.9, 79.06,
72.37, 67.34, 92.22, 75.69, 65.76, 72.33, 73.3, 97.67, 72.2,
75.72, 75.54, 69.92, 90.63, 63.54, 69.57, 74.84, 83.36, 82.06,
83.93, 79.54, 64.3, 76.72, 96.91, 71.88, 74.04, 70.46, 83.65,
64.77, 76.83, 67.41, 83.59, 67.99, 65.19, 71.77, 66.68, 69.64,
72.99, 72.89, 87.23, 70.84, 67.67, 66.71, 73.55, 65.93, 97.05,
68.31, 67.92, 66.03, 77.3, 88.25, 64.92, 84.35, 69.97, 81.7,
79.06, 67.46, 90.08, 66.56, 84.15, 68.2, 66.47, 88.82, 80.93,
65.14, 67.62, 69.96, 90.76, 90.41, 71.47, 68.94, 72.72, 69.76,
82.11, 69.8, 69.72, 67.81, 70.37, 84.29, 64.47, 82.47, 88.7,
72.51, 70.68, 73.63, 73.99, 66.21, 70.66, 66.96, 71.49, 68.07
), birth = structure(c(766, 896, 920, 959, 1258, 1277, 815, 1226,
729, 1295, 854, 682, 811, 690, 741, 1056, 690, 1199, 1133, 1233,
806, 1097, 838, 1278, 773, 1059, 1373, 1038, 1387, 859, 1343,
926, 1074, 1366, 784, 1207, 1222, 1150, 965, 862, 819, 1072,
1238, 1320, 976, 1296, 760, 833, 1295, 767, 1030, 727, 774, 1126,
1113, 849, 1285, 928, 1247, 799, 1130, 1049, 829, 1318, 790,
1067, 1013, 831, 936, 841, 781, 1378, 801, 1247, 770, 1372, 1129,
892, 1172, 720, 982, 884, 1380, 871, 889, 820, 1374, 791, 1271,
1033, 698, 1185, 1273, 1257, 952, 1048, 904, 906, 1051, 684), class = "Date")), class = "data.frame", .Names = c("height",
"weight", "birth"), row.names = c(NA, -100L))
### libraries
library(ggplot2)
library(viridis)
#> Loading required package: viridisLite
### plot default colour scale
ggplot(data=df, aes(x = height, y = weight, colour = birth)) +
geom_point(size=4)
### plot with viridis colour scale
ggplot(data=df, aes(x = height, y = weight, colour = birth)) +
geom_point(size=4) +
scale_colour_viridis()
#> Error in as.Date.numeric(value): 'origin' must be supplied
解决方法如下:
将日期转换为数值,然后再将它们分配给颜色美学。在对 scale_colour_viridis()
的调用中,您然后使用相应的中断和标签:
# create equidistant sequence of dates to use as labels
lab_dates <- pretty(df$birth)
ggplot(data=df, aes(x = height, y = weight, colour = as.numeric(birth))) +
geom_point(size=4) + scale_colour_viridis(breaks = as.numeric(lab_dates),
labels = lab_dates)
不需要任何额外变量的替代方法是设置 trans = "date"
.
ggplot(df, aes(x = height, y = weight, colour = birth)) +
geom_point(size = 4) +
scale_colour_viridis_c(trans = "date")
(使用 {ggplot2} v3.3.2)
我正在尝试 将日期映射到 ggplot2 中的 viridis
色标 。默认的 ggplot
色标适用于日期。但是我在将它们映射到 viridis
比例时遇到了问题,出现有关 'origin' 未提供给 as.Date.numeric()
的错误(尝试使用 ggplot2::scale_color_gradient()
时出现类似错误)。请参阅下面的 reprex。
关于最有效的排序方法有什么建议吗?
### data
df <- structure(list(height = c(182.87, 179.12, 169.15, 175.66, 164.47,
158.27, 161.69, 165.84, 181.32, 167.37, 160.06, 166.48, 175.39,
164.7, 163.79, 181.13, 169.24, 176.22, 174.09, 180.11, 179.24,
161.92, 169.85, 160.57, 168.24, 177.75, 183.21, 167.75, 181.15,
181.56, 160.03, 165.62, 181.64, 159.67, 177.03, 163.35, 175.21,
160.8, 166.46, 157.95, 180.61, 159.52, 163.01, 165.8, 170.03,
157.16, 164.58, 163.47, 185.43, 165.34, 163.45, 163.97, 161.38,
160.09, 178.64, 159.78, 161.57, 161.83, 169.66, 166.84, 159.32,
170.51, 161.84, 171.41, 166.75, 166.19, 169.16, 157.01, 167.51,
160.47, 162.33, 175.67, 174.25, 158.94, 172.72, 159.23, 176.54,
184.34, 163.94, 160.09, 162.32, 162.59, 171.94, 158.07, 158.35,
162.18, 159.38, 171.45, 163.17, 183.1, 177.14, 171.08, 159.33,
185.43, 162.65, 159.44, 164.11, 159.13, 160.58, 164.88), weight = c(76.57,
80.43, 75.48, 94.54, 71.78, 69.9, 68.85, 70.44, 76.9, 79.06,
72.37, 67.34, 92.22, 75.69, 65.76, 72.33, 73.3, 97.67, 72.2,
75.72, 75.54, 69.92, 90.63, 63.54, 69.57, 74.84, 83.36, 82.06,
83.93, 79.54, 64.3, 76.72, 96.91, 71.88, 74.04, 70.46, 83.65,
64.77, 76.83, 67.41, 83.59, 67.99, 65.19, 71.77, 66.68, 69.64,
72.99, 72.89, 87.23, 70.84, 67.67, 66.71, 73.55, 65.93, 97.05,
68.31, 67.92, 66.03, 77.3, 88.25, 64.92, 84.35, 69.97, 81.7,
79.06, 67.46, 90.08, 66.56, 84.15, 68.2, 66.47, 88.82, 80.93,
65.14, 67.62, 69.96, 90.76, 90.41, 71.47, 68.94, 72.72, 69.76,
82.11, 69.8, 69.72, 67.81, 70.37, 84.29, 64.47, 82.47, 88.7,
72.51, 70.68, 73.63, 73.99, 66.21, 70.66, 66.96, 71.49, 68.07
), birth = structure(c(766, 896, 920, 959, 1258, 1277, 815, 1226,
729, 1295, 854, 682, 811, 690, 741, 1056, 690, 1199, 1133, 1233,
806, 1097, 838, 1278, 773, 1059, 1373, 1038, 1387, 859, 1343,
926, 1074, 1366, 784, 1207, 1222, 1150, 965, 862, 819, 1072,
1238, 1320, 976, 1296, 760, 833, 1295, 767, 1030, 727, 774, 1126,
1113, 849, 1285, 928, 1247, 799, 1130, 1049, 829, 1318, 790,
1067, 1013, 831, 936, 841, 781, 1378, 801, 1247, 770, 1372, 1129,
892, 1172, 720, 982, 884, 1380, 871, 889, 820, 1374, 791, 1271,
1033, 698, 1185, 1273, 1257, 952, 1048, 904, 906, 1051, 684), class = "Date")), class = "data.frame", .Names = c("height",
"weight", "birth"), row.names = c(NA, -100L))
### libraries
library(ggplot2)
library(viridis)
#> Loading required package: viridisLite
### plot default colour scale
ggplot(data=df, aes(x = height, y = weight, colour = birth)) +
geom_point(size=4)
### plot with viridis colour scale
ggplot(data=df, aes(x = height, y = weight, colour = birth)) +
geom_point(size=4) +
scale_colour_viridis()
#> Error in as.Date.numeric(value): 'origin' must be supplied
解决方法如下:
将日期转换为数值,然后再将它们分配给颜色美学。在对 scale_colour_viridis()
的调用中,您然后使用相应的中断和标签:
# create equidistant sequence of dates to use as labels
lab_dates <- pretty(df$birth)
ggplot(data=df, aes(x = height, y = weight, colour = as.numeric(birth))) +
geom_point(size=4) + scale_colour_viridis(breaks = as.numeric(lab_dates),
labels = lab_dates)
不需要任何额外变量的替代方法是设置 trans = "date"
.
ggplot(df, aes(x = height, y = weight, colour = birth)) +
geom_point(size = 4) +
scale_colour_viridis_c(trans = "date")
(使用 {ggplot2} v3.3.2)