如何为格子中的等高线图添加颜色?
How do I add color to a contourplot in lattice?
我正在尝试制作一个看起来像这样的等高线图(或水平图,我并不特别关心哪个):
我有这个代码:
contourplot(z~x*y, data=df1, xlim=c(0,100), ylim=c(0,50),
scales=list(x=list(at=c(0,20,40,60,80,100)),
y=list(at=c(0,10,20,30,40,50))),
at=seq(0,5000,by=500))
效果很好,但是当我尝试添加这样的颜色时:
contourplot(z~x*y, data=df1, xlim=c(0,100), ylim=c(0,50),
scales=list(x=list(at=c(0,20,40,60,80,100)),
y=list(at=c(0,10,20,30,40,50))),
at=seq(0,5000,by=500), region=T,
colorkey=list(at=seq(0,5000,by=10)), col.regions=rainbow(5000))
我得到了这个可怕的结果:
我认为问题主要是规模问题,但无论我为 at
或 col.regions
尝试哪个值,我都无法改变结果。我什至尝试了 interpolate
选项,但它确实有所作为。我搜索了很多,但我不得不说我发现 lattice 的文档有点令人费解。
data.frame是这样的:
structure(list(x = c(99.9735523336143, 99.9735523336143, 99.9735523336143,
9.99735523336143, 99.9735523336143, 99.9735523336143, 99.9735523336143,
99.9735523336143, 9.99735523336143, 99.9735523336143, 9.99735523336143,
9.99735523336143, 9.99735523336143, 9.99735523336143, 9.99735523336143,
9.99735523336143, 19.9947104667229, 19.9947104667229, 19.9947104667229,
19.9947104667229, 19.9947104667229, 19.9947104667229, 19.9947104667229,
19.9947104667229, 29.9920657000843, 29.9920657000843, 29.9920657000843,
29.9920657000843, 29.9920657000843, 29.9920657000843, 29.9920657000843,
29.9920657000843, 39.9103904572927, 39.9103904572927, 39.9103904572927,
39.9103904572927, 39.9103904572927, 39.9103904572927, 39.9103904572927,
39.9103904572927, 49.9867761668072, 49.9867761668072, 49.9867761668072,
4.99867761668072, 49.9867761668072, 49.9867761668072, 49.9867761668072,
49.9867761668072, 4.99867761668072, 49.9867761668072, 4.99867761668072,
4.99867761668072, 4.99867761668072, 4.99867761668072, 4.99867761668072,
4.99867761668072, 60.0631618763217, 60.0631618763217, 60.0631618763217,
60.0631618763217, 60.0631618763217, 60.0631618763217, 60.0631618763217,
60.0631618763217, 69.9419713954535, 69.9419713954535, 69.9419713954535,
69.9419713954535, 69.9419713954535, 69.9419713954535, 69.9419713954535,
69.9419713954535, 79.8207809145854, 79.8207809145854, 79.8207809145854,
79.8207809145854, 79.8207809145854, 79.8207809145854, 79.8207809145854,
79.8207809145854, 90.0947428144825, 90.0947428144825, 90.0947428144825,
90.0947428144825, 90.0947428144825, 90.0947428144825, 90.0947428144825,
90.0947428144825), y = c(0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.0999735523336143, 0.999735523336143, 19.9947104667229,
1.99947104667229, 49.9867761668072, 0.499867761668072, 4.99867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.0999735523336143, 0.999735523336143, 19.9947104667229,
1.99947104667229, 49.9867761668072, 0.499867761668072, 4.99867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072), z = c(7.70262939725884,
72.4762038498177, 1897.66010932237, 1.58054830233696, 165.070646557113,
3792.42153530273, 356.278306229365, 9223.47853672023, 14.2758673767137,
935.839000278543, 341.884101039707, 31.701193606272, 665.004073393329,
66.9391931173054, 1509.15007815714, 171.754281181158, 2.89064204660586,
26.2635839730677, 636.27993673818, 58.5156364281774, 1243.02434222159,
123.885961157754, 2852.46703855471, 318.792649405134, 3.97493187787477,
36.3111148789109, 889.55438527022, 81.1632049285379, 1744.63858516148,
172.284250494152, 4044.24262993302, 444.58461882461, 4.86420556288387,
44.6549593184585, 1105.67331471408, 100.121759918144, 2176.12813241023,
213.072583938431, 5090.54862806588, 551.33727936112, 5.608738003459,
51.7306506719939, 1294.26413375778, 0.827199861040891, 116.33438144459,
2555.52749317869, 248.208540590425, 6028.1869116069, 7.44790194067698,
643.985400190343, 177.310068151686, 16.5109365887457, 344.080667093976,
34.8178598080871, 776.206332364582, 89.2039775124962, 6.21939893932657,
57.6140181031486, 1455.92520463951, 129.934909189257, 2883.12188866332,
277.918147781392, 6852.31788369484, 722.963381835502, 6.70936909598539,
62.4057616449996, 1591.87930397262, 141.11465788703, 3160.532277617,
302.546915494946, 7561.72493964819, 789.007565625702, 7.10911809960051,
66.3821496606545, 1708.59117356901, 150.482643243694, 3400.26770836962,
323.370848584576, 8184.13138429934, 845.374097718433, 7.44465742618642,
69.7893126020086, 1812.39459545251, 158.596014882138, 3614.91792337778,
341.585243605719, 8749.51748025968, 895.192251986793)), .Names = c("x",
"y", "z"), row.names = c(NA, -88L), class = "data.frame")
从 latticeExtra 包中添加 panel.2dsmoother
将为您提供(相对)平滑的颜色。虽然如果你仔细观察,边缘仍然有点锯齿:
contourplot(z~x*y, data=df1, xlim=c(0,100), ylim=c(0,50),
scales=list(x=list(at=c(0,20,40,60,80,100)),
y=list(at=c(0,10,20,30,40,50))),
at=seq(0,5000,by=500), region=T,
colorkey=list(at=seq(0,5000,by=10)),
col.regions=rainbow(5000),
panel = latticeExtra::panel.2dsmoother)
如果您不局限于 lattice 包中的选项,grpahics 包中的 filled.contour
看起来相当不错。您需要进行一些数据整理:
df2 <- tidyr::spread(df1, y, z)
df.x <- df2$x
df.y <- as.numeric(colnames(df2)[-1])
df.z <- as.matrix(df2[,-1])
filled.contour(df.x, df.y, df.z,
nlevels = 10,
col = rainbow(10),
plot.axes = {
axis(1)
axis(2)
contour(df.x, df.y, df.z, add = T)}
)
我正在尝试制作一个看起来像这样的等高线图(或水平图,我并不特别关心哪个):
我有这个代码:
contourplot(z~x*y, data=df1, xlim=c(0,100), ylim=c(0,50),
scales=list(x=list(at=c(0,20,40,60,80,100)),
y=list(at=c(0,10,20,30,40,50))),
at=seq(0,5000,by=500))
效果很好,但是当我尝试添加这样的颜色时:
contourplot(z~x*y, data=df1, xlim=c(0,100), ylim=c(0,50),
scales=list(x=list(at=c(0,20,40,60,80,100)),
y=list(at=c(0,10,20,30,40,50))),
at=seq(0,5000,by=500), region=T,
colorkey=list(at=seq(0,5000,by=10)), col.regions=rainbow(5000))
我得到了这个可怕的结果:
我认为问题主要是规模问题,但无论我为 at
或 col.regions
尝试哪个值,我都无法改变结果。我什至尝试了 interpolate
选项,但它确实有所作为。我搜索了很多,但我不得不说我发现 lattice 的文档有点令人费解。
data.frame是这样的:
structure(list(x = c(99.9735523336143, 99.9735523336143, 99.9735523336143,
9.99735523336143, 99.9735523336143, 99.9735523336143, 99.9735523336143,
99.9735523336143, 9.99735523336143, 99.9735523336143, 9.99735523336143,
9.99735523336143, 9.99735523336143, 9.99735523336143, 9.99735523336143,
9.99735523336143, 19.9947104667229, 19.9947104667229, 19.9947104667229,
19.9947104667229, 19.9947104667229, 19.9947104667229, 19.9947104667229,
19.9947104667229, 29.9920657000843, 29.9920657000843, 29.9920657000843,
29.9920657000843, 29.9920657000843, 29.9920657000843, 29.9920657000843,
29.9920657000843, 39.9103904572927, 39.9103904572927, 39.9103904572927,
39.9103904572927, 39.9103904572927, 39.9103904572927, 39.9103904572927,
39.9103904572927, 49.9867761668072, 49.9867761668072, 49.9867761668072,
4.99867761668072, 49.9867761668072, 49.9867761668072, 49.9867761668072,
49.9867761668072, 4.99867761668072, 49.9867761668072, 4.99867761668072,
4.99867761668072, 4.99867761668072, 4.99867761668072, 4.99867761668072,
4.99867761668072, 60.0631618763217, 60.0631618763217, 60.0631618763217,
60.0631618763217, 60.0631618763217, 60.0631618763217, 60.0631618763217,
60.0631618763217, 69.9419713954535, 69.9419713954535, 69.9419713954535,
69.9419713954535, 69.9419713954535, 69.9419713954535, 69.9419713954535,
69.9419713954535, 79.8207809145854, 79.8207809145854, 79.8207809145854,
79.8207809145854, 79.8207809145854, 79.8207809145854, 79.8207809145854,
79.8207809145854, 90.0947428144825, 90.0947428144825, 90.0947428144825,
90.0947428144825, 90.0947428144825, 90.0947428144825, 90.0947428144825,
90.0947428144825), y = c(0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.0999735523336143, 0.999735523336143, 19.9947104667229,
1.99947104667229, 49.9867761668072, 0.499867761668072, 4.99867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.0999735523336143, 0.999735523336143, 19.9947104667229,
1.99947104667229, 49.9867761668072, 0.499867761668072, 4.99867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072, 0.0999735523336143, 0.499867761668072,
9.99735523336143, 0.999735523336143, 19.9947104667229, 1.99947104667229,
49.9867761668072, 4.99867761668072), z = c(7.70262939725884,
72.4762038498177, 1897.66010932237, 1.58054830233696, 165.070646557113,
3792.42153530273, 356.278306229365, 9223.47853672023, 14.2758673767137,
935.839000278543, 341.884101039707, 31.701193606272, 665.004073393329,
66.9391931173054, 1509.15007815714, 171.754281181158, 2.89064204660586,
26.2635839730677, 636.27993673818, 58.5156364281774, 1243.02434222159,
123.885961157754, 2852.46703855471, 318.792649405134, 3.97493187787477,
36.3111148789109, 889.55438527022, 81.1632049285379, 1744.63858516148,
172.284250494152, 4044.24262993302, 444.58461882461, 4.86420556288387,
44.6549593184585, 1105.67331471408, 100.121759918144, 2176.12813241023,
213.072583938431, 5090.54862806588, 551.33727936112, 5.608738003459,
51.7306506719939, 1294.26413375778, 0.827199861040891, 116.33438144459,
2555.52749317869, 248.208540590425, 6028.1869116069, 7.44790194067698,
643.985400190343, 177.310068151686, 16.5109365887457, 344.080667093976,
34.8178598080871, 776.206332364582, 89.2039775124962, 6.21939893932657,
57.6140181031486, 1455.92520463951, 129.934909189257, 2883.12188866332,
277.918147781392, 6852.31788369484, 722.963381835502, 6.70936909598539,
62.4057616449996, 1591.87930397262, 141.11465788703, 3160.532277617,
302.546915494946, 7561.72493964819, 789.007565625702, 7.10911809960051,
66.3821496606545, 1708.59117356901, 150.482643243694, 3400.26770836962,
323.370848584576, 8184.13138429934, 845.374097718433, 7.44465742618642,
69.7893126020086, 1812.39459545251, 158.596014882138, 3614.91792337778,
341.585243605719, 8749.51748025968, 895.192251986793)), .Names = c("x",
"y", "z"), row.names = c(NA, -88L), class = "data.frame")
从 latticeExtra 包中添加 panel.2dsmoother
将为您提供(相对)平滑的颜色。虽然如果你仔细观察,边缘仍然有点锯齿:
contourplot(z~x*y, data=df1, xlim=c(0,100), ylim=c(0,50),
scales=list(x=list(at=c(0,20,40,60,80,100)),
y=list(at=c(0,10,20,30,40,50))),
at=seq(0,5000,by=500), region=T,
colorkey=list(at=seq(0,5000,by=10)),
col.regions=rainbow(5000),
panel = latticeExtra::panel.2dsmoother)
如果您不局限于 lattice 包中的选项,grpahics 包中的 filled.contour
看起来相当不错。您需要进行一些数据整理:
df2 <- tidyr::spread(df1, y, z)
df.x <- df2$x
df.y <- as.numeric(colnames(df2)[-1])
df.z <- as.matrix(df2[,-1])
filled.contour(df.x, df.y, df.z,
nlevels = 10,
col = rainbow(10),
plot.axes = {
axis(1)
axis(2)
contour(df.x, df.y, df.z, add = T)}
)