ggplot2에서 facet_sigma 및 척도 = "자유"로 개별 축 한계 설정
예측 값 대 잔차 그림과 함께 예측 값 대 실제 값을 나란히 보기 위해 패싯된 그림을 만들고 있습니다.사용할 것입니다.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대.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..)).
다음은 사용할 데이터입니다(용해 전 실제 값, 예측 값 및 잔여 값).
results <- read.table(header = TRUE, text = "
act pred resid
52.81 52.8675013282404 -0.0575013282403773
44.46 42.7682474758679 1.69175252413213
54.5866666666667 49.0048248585123 5.58184180815435
36.2333333333333 35.5238560262515 0.709477307081826
53.2266666666667 48.7942868566949 4.43237980997177
41.7233333333333 41.5750416040131 0.148291729320228
35.2966666666667 33.9548164913007 1.34185017536599
30.6833333333333 29.9787449128663 0.704588420467079
39.25 37.6443975781139 1.60560242188613
35.8866666666667 36.7196211666685 -0.832954500001826
25.1 27.6043278172077 -2.50432781720766
29.0466666666667 27.0615724310721 1.98509423559461
23.2766666666667 31.2073056885252 -7.93063902185855
56.3866666666667 55.0886903524179 1.29797631424874
42.92 43.0895814712768 -0.169581471276786
41.57 43.0895814712768 -1.51958147127679
27.92 32.3549865881578 -4.43498658815778
23.16 26.2428426737583 -3.08284267375831
38.0166666666667 36.6926037128343 1.32406295383237
61.8966666666667 56.7987490221996 5.09791764446704
37.41 45.0370788180147 -7.62707881801468
41.6333333333333 41.8231642271826 -0.189830893849219
35.9466666666667 38.3297859332601 -2.38311926659339
48.9933333333333 49.5343916620086 -0.541058328675241
30.5666666666667 30.8535641206809 -0.286897454014273
32.08 29.0117492750411 3.06825072495888
40.3633333333333 36.9767968381391 3.38653649519422
53.2266666666667 49.0826677983065 4.14399886836018
64.6066666666667 54.4678549541069 10.1388117125598
38.5366666666667 35.5059204731218 3.03074619354486
41.7233333333333 41.5333417555995 0.189991577733821
25.78 27.6069075391361 -1.82690753913609
33.4066666666667 31.2404889715121 2.16617769515461
27.8033333333333 27.8920960978598 -0.088762764526507
39.3266666666667 37.8505531149324 1.47611355173427
48.9933333333333 49.2616631533957 -0.268329820062384
25.2433333333333 30.366837650159 -5.12350431682565
32.67 31.1623492639066 1.5076507360934
55.17 55.0456078770405 0.124392122959534
42.92 42.772538591063 0.147461408936991
54.5866666666667 49.2419293590535 5.34473730761318
23.16 26.1963523976241 -3.03635239762411
64.6066666666667 54.4080781796616 10.1985884870051
40.7966666666667 44.9796700541254 -4.18300338745873
39.0166666666667 34.6996927469131 4.31697391975358
41.6333333333333 41.6227713664027 0.0105619669306023
35.8866666666667 36.8449646519306 -0.958297985263961
25.1 27.5318686661673 -2.43186866616734
23.2766666666667 31.6641793552795 -8.38751268861282
44.46 42.8198894266632 1.64011057333683
34.2166666666667 40.5769177148146 -6.36025104814794
40.8033333333333 40.5769177148146 0.226415618518729
24.5766666666667 29.3807781312816 -4.80411146461488
35.73 36.8579132935989 -1.1279132935989
61.8966666666667 55.5617033901752 6.33496327649151
62.1833333333333 55.8097119335638 6.37362139976954
74.6466666666667 55.1041728261666 19.5424938405001
39.4366666666667 43.6094641699075 -4.17279750324084
36.6 37.0674887276681 -0.467488727668119
27.1333333333333 27.3876960746536 -0.254362741320246
")
여기 더미가 있는 코드가 있습니다.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()

당신이 원하는 것을 이해할 수 있을지는 모르겠지만, 제가 이해한 것을 바탕으로 합니다.
x 척도가 동일한 것 같습니다. y 척도는 동일하지 않습니다. 이는 사용자가 지정했기 때문입니다.scales ="free"
지정할 수 있습니다.scales = "free_x"x만 자유롭게 허용(이 경우와 동일)pred정의에 따라 범위가 동일합니다.
p <- ggplot(plot, aes(x = pred, y = value)) + geom_point(size = 2.5) + theme_bw()
p <- p + facet_wrap(~variable, scales = "free_x")
저를 위해 일했습니다, 사진을 보세요.

나는 네가 그것을 너무 어렵게 만들었다고 생각해 - 나는 min과 max가 있는 공식을 기반으로 한계를 정의했던 것을 한 번 기억하는 것 같아, 만약 직면한다면 나는 그것이 그 값들만 사용했다고 생각하지만, 나는 코드를 찾을 수 없어.
cord_cartesian 명령을 사용하여 범위를 지정하여 원하는 y축 범위를 설정할 수도 있습니다. 이전 사후 사용 척도 = 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
언급URL : https://stackoverflow.com/questions/18046051/setting-individual-axis-limits-with-facet-wrap-and-scales-free-in-ggplot2
'programing' 카테고리의 다른 글
| 시퀀스 번호, 잘못된 번호 (0) | 2023.07.15 |
|---|---|
| Xcode 12.3: iOS 시뮬레이터를 위한 빌드이지만, 링크되고 내장된 프레임워크는 iOS + iOS 시뮬레이터를 위해 빌드되었습니다. (0) | 2023.07.15 |
| Oracle SQL Developer에서 선택한 대문자 텍스트 바로 가기 (0) | 2023.07.15 |
| MongoDB 복제본 세트를 독립 실행형 서버로 변환하는 방법 (0) | 2023.07.15 |
| 워드프레스 - 절대 링크를 상대 링크로 변경하는 방법 (0) | 2023.07.15 |
