ggplot2에서 facet_wrap 및 scales = "free"로 개별 축 제한 설정
예측 된 값과 잔차의 플롯과 함께 예측 된 값과 실제 값을 나란히보기 위해 패싯 플롯을 만들고 있습니다. shiny
다른 훈련 매개 변수를 사용하여 모델링 노력의 결과를 탐색하는 데 도움 이 될 것 입니다. 85 %의 데이터로 모델을 훈련시키고 나머지 15 %에 대해 테스트 한 다음이를 5 번 반복하여 매번 실제 / 예측 값을 수집합니다. 잔차를 계산 한 후 data.frame
다음과 같이 보입니다.
head(results)
act pred resid
2 52.81000 52.86750 -0.05750133
3 44.46000 42.76825 1.69175252
4 54.58667 49.00482 5.58184181
5 36.23333 35.52386 0.70947731
6 53.22667 48.79429 4.43237981
7 41.72333 41.57504 0.14829173
내가 원하는 것 :
- 측면 음모에 의해 사이드
pred
대act
및pred
대resid
- x / y 범위 / 한계
pred
대act
동일, 이상적으로는min(min(results$act), min(results$pred))
~까지max(max(results$act), max(results$pred))
- x / y 범위 / 한계
pred
vs. 내가 실제 vs. 예측 플롯에 수행하는 작업에 영향을받지resid
않습니다 .x
예측 된 값과y
잔차 범위에 대한 플로팅 은 괜찮습니다.
두 플롯을 나란히보기 위해 데이터를 녹입니다.
library(reshape2)
plot <- melt(results, id.vars = "pred")
이제 플롯 :
library(ggplot2)
p <- ggplot(plot, aes(x = pred, y = value)) + geom_point(size = 2.5) + theme_bw()
p <- p + facet_wrap(~variable, scales = "free")
print(p)
그것은 내가 원하는 것에 매우 가깝습니다.
내가 원하는 것은 실제 대 예측에 대한 x 및 y 범위가 동일 할 것으로 예상되는 것이지만이를 지정하는 방법을 잘 모르겠 으며 예측 대 잔차 플롯에 대해 수행 할 필요 가 없습니다 . 범위는 완전히 다릅니다.
나는 모두이 같은 추가 시도 scale_x_continous
및 scale_y_continuous
:
min_xy <- min(min(plot$pred), min(plot$value))
max_xy <- max(max(plot$pred), max(plot$value))
p <- ggplot(plot, aes(x = pred, y = value)) + geom_point(size = 2.5) + theme_bw()
p <- p + facet_wrap(~variable, scales = "free")
p <- p + scale_x_continuous(limits = c(min_xy, max_xy))
p <- p + scale_y_continuous(limits = c(min_xy, max_xy))
print(p)
그러나 그것은 min()
잔여 가치 를 선택 합니다.
내가 가진 마지막 아이디어 중 하나는 녹이기 전에 최소값 act
과 pred
변수 의 값을 저장 한 다음 녹은 데이터 프레임에 추가하여 표시되는 패싯을 지정하는 것입니다.
head(results)
act pred resid
2 52.81000 52.86750 -0.05750133
3 44.46000 42.76825 1.69175252
4 54.58667 49.00482 5.58184181
5 36.23333 35.52386 0.70947731
min_xy <- min(min(results$act), min(results$pred))
max_xy <- max(max(results$act), max(results$pred))
plot <- melt(results, id.vars = "pred")
plot <- rbind(plot, data.frame(pred = c(min_xy, max_xy),
variable = c("act", "act"), value = c(max_xy, min_xy)))
p <- ggplot(plot, aes(x = pred, y = value)) + geom_point(size = 2.5) + theme_bw()
p <- p + facet_wrap(~variable, scales = "free")
print(p)
포인트도 표시되는 것을 제외하고는 내가 원하는 것을 수행합니다.
이와 같은 작업에 대한 제안 사항이 있습니까?
이 아이디어 를 추가하는 것을 보았지만 비트 geom_blank()
를 지정하고 aes()
제대로 작동하는지 또는 geom_point()
히스토그램 사용에 해당하는 것이 무엇인지 잘 모르겠습니다 aes(y = max(..count..))
.
다음은 재생할 데이터입니다 (용해 전 실제 값, 예측 값 및 잔여 값).
> dput(results)
structure(list(act = c(52.81, 44.46, 54.5866666666667, 36.2333333333333,
53.2266666666667, 41.7233333333333, 35.2966666666667, 30.6833333333333,
39.25, 35.8866666666667, 25.1, 29.0466666666667, 23.2766666666667,
56.3866666666667, 42.92, 41.57, 27.92, 23.16, 38.0166666666667,
61.8966666666667, 37.41, 41.6333333333333, 35.9466666666667,
48.9933333333333, 30.5666666666667, 32.08, 40.3633333333333,
53.2266666666667, 64.6066666666667, 38.5366666666667, 41.7233333333333,
25.78, 33.4066666666667, 27.8033333333333, 39.3266666666667,
48.9933333333333, 25.2433333333333, 32.67, 55.17, 42.92, 54.5866666666667,
23.16, 64.6066666666667, 40.7966666666667, 39.0166666666667,
41.6333333333333, 35.8866666666667, 25.1, 23.2766666666667, 44.46,
34.2166666666667, 40.8033333333333, 24.5766666666667, 35.73,
61.8966666666667, 62.1833333333333, 74.6466666666667, 39.4366666666667,
36.6, 27.1333333333333), pred = c(52.8675013282404, 42.7682474758679,
49.0048248585123, 35.5238560262515, 48.7942868566949, 41.5750416040131,
33.9548164913007, 29.9787449128663, 37.6443975781139, 36.7196211666685,
27.6043278172077, 27.0615724310721, 31.2073056885252, 55.0886903524179,
43.0895814712768, 43.0895814712768, 32.3549865881578, 26.2428426737583,
36.6926037128343, 56.7987490221996, 45.0370788180147, 41.8231642271826,
38.3297859332601, 49.5343916620086, 30.8535641206809, 29.0117492750411,
36.9767968381391, 49.0826677983065, 54.4678549541069, 35.5059204731218,
41.5333417555995, 27.6069075391361, 31.2404889715121, 27.8920960978598,
37.8505531149324, 49.2616631533957, 30.366837650159, 31.1623492639066,
55.0456078770405, 42.772538591063, 49.2419293590535, 26.1963523976241,
54.4080781796616, 44.9796700541254, 34.6996927469131, 41.6227713664027,
36.8449646519306, 27.5318686661673, 31.6641793552795, 42.8198894266632,
40.5769177148146, 40.5769177148146, 29.3807781312816, 36.8579132935989,
55.5617033901752, 55.8097119335638, 55.1041728261666, 43.6094641699075,
37.0674887276681, 27.3876960746536), resid = c(-0.0575013282403773,
1.69175252413213, 5.58184180815435, 0.709477307081826, 4.43237980997177,
0.148291729320228, 1.34185017536599, 0.704588420467079, 1.60560242188613,
-0.832954500001826, -2.50432781720766, 1.98509423559461, -7.93063902185855,
1.29797631424874, -0.169581471276786, -1.51958147127679, -4.43498658815778,
-3.08284267375831, 1.32406295383237, 5.09791764446704, -7.62707881801468,
-0.189830893849219, -2.38311926659339, -0.541058328675241, -0.286897454014273,
3.06825072495888, 3.38653649519422, 4.14399886836018, 10.1388117125598,
3.03074619354486, 0.189991577733821, -1.82690753913609, 2.16617769515461,
-0.088762764526507, 1.47611355173427, -0.268329820062384, -5.12350431682565,
1.5076507360934, 0.124392122959534, 0.147461408936991, 5.34473730761318,
-3.03635239762411, 10.1985884870051, -4.18300338745873, 4.31697391975358,
0.0105619669306023, -0.958297985263961, -2.43186866616734, -8.38751268861282,
1.64011057333683, -6.36025104814794, 0.226415618518729, -4.80411146461488,
-1.1279132935989, 6.33496327649151, 6.37362139976954, 19.5424938405001,
-4.17279750324084, -0.467488727668119, -0.254362741320246)), .Names = c("act",
"pred", "resid"), row.names = c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L,
10L, 11L, 12L, 13L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L,
24L, 25L, 26L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L,
38L, 39L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 51L,
52L, 54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L, 64L, 65L
), class = "data.frame")
다음은 더미 geom_blank
레이어 가있는 코드입니다.
range_act <- range(range(results$act), range(results$pred))
d <- reshape2::melt(results, id.vars = "pred")
dummy <- data.frame(pred = range_act, value = range_act,
variable = "act", stringsAsFactors=FALSE)
ggplot(d, aes(x = pred, y = value)) +
facet_wrap(~variable, scales = "free") +
geom_point(size = 2.5) +
geom_blank(data=dummy) +
theme_bw()
나는 당신이 원하는 것을 이해하지 못하지만 내가 이해 한 것을 바탕으로
the x scale seems to be the same, it is the y scale that is not the same, and that is because you specified scales ="free"
you can specify scales = "free_x" to only allow x to be free (in this case it is the same as pred has the same range by definition)
p <- ggplot(plot, aes(x = pred, y = value)) + geom_point(size = 2.5) + theme_bw()
p <- p + facet_wrap(~variable, scales = "free_x")
worked for me, see the picture
I think you were making it too difficult - I do seem to remember one time defining the limits based on a formula with min and max and if faceted I think it used only those values, but I can't find the code
You can also specify the range with the coord_cartesian command to set the y-axis range that you want, an like in the previous post use scales = free_x
p <- ggplot(plot, aes(x = pred, y = value)) +
geom_point(size = 2.5) +
theme_bw()+
coord_cartesian(ylim = c(-20, 80))
p <- p + facet_wrap(~variable, scales = "free_x")
p
'Programing' 카테고리의 다른 글
약한 참조에 대한 실용적인 사용이 있습니까? (0) | 2020.08.29 |
---|---|
클라이언트 측 JavaScript 종속성을 관리하는 방법은 무엇입니까? (0) | 2020.08.29 |
자바 스레드 덤프를 분석하는 방법은 무엇입니까? (0) | 2020.08.29 |
PHP에서 비동기 GET 요청을 어떻게합니까? (0) | 2020.08.29 |
Visual Studio 2012의 C ++ 11 기능 (0) | 2020.08.29 |