我需要在一個圖中使用多個箱線圖,使用不同的資料子集和不同的變數。我做了以下事情:
data_VAR <- subset(Data_HV_VAR, VAR == 1
data_NoVAR <- subset(Data_HV_VAR, VAR == 0)
boxplot(data_NoVAR$TorHeim, data_VAR$TorHeim,
data_NoVAR$TorGast, data_VAR$TorGast, ylab = "number of goals",
names=c("home team", "home team","away team", "away team"),show.names=TRUE,
col=c('powderblue', 'seagreen3','powderblue', 'seagreen3'))
legend("topright", inset = c(0.01, 0.01),
c("VAR","No VAR" ), fill=c("seagreen3","powderblue" ), box.col = "transparent", bg = "transparent", cex=0.8)
它起作用了,我可以使用不同的子集和不同的變數將多個箱線圖添加到一個圖中。但我不知道如何使用抖動函式添加資料點。我無法將資料點添加到所描繪的箱線圖中。我試過這個:
stripchart(data_NoVAR$TorHeim, data_VAR$TorHeim, data_NoVAR$TorGast, data_VAR$TorGast,
method = "jitter",
vertical = TRUE,
pch = 1, add = TRUE, seed = 1, width = .3, col = "BLACK")
使用 ggplot 時,我可以添加抖動,但無法弄清楚如何在一個圖中繪制所有 4 個箱線圖。使用 ggplot 我做了以下事情:
ggplot(data = data_NoVAR, aes(x = 1, y = TorGast))
geom_boxplot(fill = "powderblue") scale_x_discrete() labs( y =
"number of goals", x = "away team") geom_point(size = 2, alpha =.3,
position = position_jitter(seed = 1, width = .3))
關于這兩種選擇的任何想法?我更喜歡 ggplot (更好的設計)。但只要我找到解決方案,兩種選擇都可以。感謝您的評論 :)
uj5u.com熱心網友回復:
使用 ggplot 或 ggplot2 時,您應該能夠將不同類別的資料分組,這些類別可以在開始時單獨繪制。在 ggplot(aes(x= , y = , fill=__))
所述填充允許比x軸(在x的子集軸線這么說)一個分組不同。
p ggplot(data = data_NoVAR, aes(x = 1, y = TorGast, fill = Category2))
geom_boxplot(aes(fill = Category2)) scale_x_discrete() labs( y =
"number of goals", x = "away team") geom_point(size = 2, alpha =.3,
position = position_jitter(seed = 1, width = .3))
(不知道你的第二類叫什么名字,我寫的是category2,在我的代碼里改一下就行了!)
uj5u.com熱心網友回復:
這里的一般原則是,在使用 繪圖時ggplot2,您應該考慮您的資料集是否采用所謂的“
現在,讓我們嘗試在ggplot2.
整理資料
如前所述,您首先應該“整理”您的資料集。使用基本圖形,您可以將資料集Data_HV_VAR分成單獨的資料框,然后通過指定這些資料集中的資料列進一步將它們分開。最好只指定一個資料集,并ggplot2根據列中包含的值為我們決定如何拆分資料。Data_HV_VAR不過,我們還不能完全做到這一點,因為資料不是很“整潔”。
檢查您擁有的列的名稱:
> head(Data_HV_VAR)
VAR TorHeim TorGast
1 0 97.76619 70.24302
2 0 106.40246 54.83644
3 1 109.95918 46.84503
4 1 92.30629 56.06064
5 0 95.76701 61.09645
6 1 91.40704 51.44779
專欄沒問題VAR。對于每個觀察,這以一種方式將與該列相關的資訊編碼到一列中。“問題”結構是列TorHeim和TorGast. 將相同的資訊包含在這兩個這些列的:(1)如果該值應為“主隊”或“客隊”,和(2)的進球數。此處的目標是您要將這兩件事分成單獨的列:(1) 一列代表球隊,(2) 一列代表進球數。您可以通過多種不同的方式做到這一點(請參閱melt()、reshape()、gather())。我將在這里向您展示一個使用pivot_longer():
tidydf <- Data_HV_VAR %>%
pivot_longer(cols = -"VAR", names_to="Team", values_to="goals")
> head(tidydf)
# A tibble: 6 x 3
VAR Team goals
<int> <chr> <dbl>
1 0 TorHeim 97.8
2 0 TorGast 70.2
3 0 TorHeim 106.
4 0 TorGast 54.8
5 1 TorHeim 110.
6 1 TorGast 46.8
這樣更好。然而,在策劃讓生活更輕松之前,還有一些事情要做。首先,輸入的資料tidydf$VAR是一個整數,而實際上它應該是一個離散值。然后,我們希望將 的值更改為tidydf$Team實際名稱“主隊”和“客隊”……并確保順序正確。我們可以通過使用%>%運算子將命令通過管道連接在一起,在一行中完成所有這些操作:
tidydf <- Data_HV_VAR %>%
pivot_longer(cols = -"VAR", names_to="Team", values_to="goals") %>%
# convert numeric VAR column to a factor (discrete)
mutate(VAR=factor(VAR)) %>%
# switch order of levels and also relabel them
mutate(Team=factor(Team, levels=c("TorHeim", "TorGast"), labels=c("TorHeim"="Home Team", "TorGast"="Away Team")))
這是情節代碼和結果情節:
ggplot(tidydf, aes(x=Team, y=goals, fill=VAR))
geom_boxplot(position=position_dodge(width=1), width=0.8)
scale_fill_manual(values=c("0"="powderblue", "1"="seagreen3"))
theme_bw()
theme(
legend.position=c(0.9, 0.9),
legend.background = element_rect(color="black")
)

很酷!這是發生了什么:
- 我們設定了美學,以便 x 軸是主隊或客隊。
- Y軸是進球數
- 箱線圖的填充顏色設定為
VAR列。由于這是一個因素,因此顏色將是兩種不同顏色之一。設定此項也將強制ggplot2根據此變數對資料集進行分組或分離,因此fill=與 一起設定可以x=有效地創建我們的 4 個箱線圖。 - 該
scale_fill_manual(...函式設定箱線圖的實際顏色。這不是必需的,但如果您沒有它,您將獲得默認顏色。 - 用于情節外觀的主題功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/384670.html
上一篇:按年份過濾繪制點
