我需要使用創建情節ggplot2
這是我的代碼與可重現的例子
library(tidyverse)
gemoglabin=structure(list(Therapy.group = c(1L, 2L, 1L, 2L, 1L, 2L, 2L,
2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L,
1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L),
X.Hemoglobin..g.l...WWScreening = c(139L, 168L, 152L, 122L,
142L, 150L, 120L, 157L, 136L, 128L, 157L, 154L, 142L, 124L,
138L, 138L, 151L, 148L, 148L, 142L, 149L, 157L, 137L, 135L,
121L, 148L, 121L, 159L, 133L, 132L, 155L, 133L, 136L, 121L,
140L, 142L, 137L, 147L), X.Hemoglobin..g.L...Visit.1.Day.2 = c(166L,
141L, 144L, 121L, 141L, 145L, 121L, 158L, 135L, 121L, 158L,
152L, 144L, 128L, 129L, 146L, 142L, 141L, 139L, 139L, 140L,
159L, 143L, 132L, 134L, 149L, 123L, 163L, 145L, 141L, 145L,
142L, 146L, 121L, 143L, 139L, 145L, 149L), X.Hemoglobin..g.L...Visit.2.Day.9 = c(140L,
155L, 142L, 122L, 138L, 143L, 126L, 151L, 129L, 124L, 155L,
140L, 140L, 122L, 132L, 136L, 135L, 140L, 141L, 142L, 136L,
145L, 138L, 126L, 128L, 144L, 120L, 160L, 143L, 133L, 141L,
142L, 147L, 121L, 138L, 139L, 142L, 152L), X.Hemoglobin..g.L...Visit.3.Day.16 = c(150L,
157L, 153L, 117L, 140L, 143L, 122L, 155L, 125L, 121L, 156L,
144L, 137L, 122L, 136L, 136L, 140L, 140L, 143L, 143L, 140L,
143L, 141L, 123L, 129L, 150L, 121L, 163L, 149L, 143L, 136L,
136L, 143L, 123L, 147L, 137L, 139L, 152L), X.Hemoglobin..g.L...Visit.4.Day.23 = c(140L,
150L, 144L, 122L, 139L, 140L, 124L, 149L, 121L, 125L, 148L,
141L, 132L, 126L, 133L, 136L, 137L, 141L, 141L, 137L, 141L,
145L, 140L, 120L, 124L, 143L, 122L, 163L, 139L, 132L, 141L,
141L, 138L, 121L, 134L, 134L, 137L, 148L), X.Hemoglobin..g.L...Visit.5.Day.29 = c(132L,
165L, 141L, 122L, 143L, 140L, 131L, 153L, 123L, 121L, 150L,
150L, 139L, 132L, 132L, 139L, 136L, 134L, 145L, 137L, 144L,
147L, 134L, 124L, 128L, 148L, 121L, 167L, 142L, 127L, 140L,
141L, 144L, 126L, 132L, 134L, 136L, 148L)), class = "data.frame", row.names = c(NA,
-38L))
datadim.lng <- gemoglabin %>% pivot_longer(-Therapy.group,names_to="vizit", values_to = "gem")
datadim.lng$Therapy.group <- as.factor(datadim.lng$Therapy.group)
ggplot(datadim.lng, aes(x = vizit, y = gem, fill = Therapy.group))
geom_boxplot(position = position_dodge(width = 0.85), width = 0.8)
theme_classic()
stat_summary(
fun = median,
geom = 'line',
aes(group = Therapy.group, color = Therapy.group),
position = position_dodge(width = 0.85)
)
結果我得到了這樣的螢屏

正如我們在這里看到的,vizit 軸上的簽名被混淆了,我真的看不出哪個 vizit 編號。
如何使簽名不混合和可見?我必須在情節訪問之間留出空間

只是沒有這么小的字體,否則很難看到。
另一個問題是簽名順序錯誤。WWscreening正如我們可以看到資料集中的第一列,但在圖中它是最后一列
你能幫我修復簽名之間的空間和圖中列的正確順序嗎?謝謝
uj5u.com熱心網友回復:
我認為這里有兩個答案。一個是您提出的問題的解決方案,即您可以使用以下方法防止沖突guide_axis(n.dodge = 2)
ggplot(datadim.lng, aes(x = vizit, y = gem, fill = Therapy.group))
geom_boxplot(position = position_dodge(width = 0.85), width = 0.8)
theme_classic()
stat_summary(
fun = median,
geom = 'line',
aes(group = Therapy.group, color = Therapy.group),
position = position_dodge(width = 0.85)
)
guides(x = guide_axis(n.dodge = 2))

但我認為更好的答案是您應該重命名您正在繪制的級別。這將使觀眾更容易決議和理解情節。
datadim.lng$vizit <- gsub("X\\.Hemoglobin\\.\\.g\\.(l|L)", "Hb (g/l)",
datadim.lng$vizit)
datadim.lng$vizit <- gsub("\\.{3}", "\n", datadim.lng$vizit)
datadim.lng$vizit <- gsub("\\.", " ", datadim.lng$vizit)
datadim.lng$vizit <- gsub(" D", ", D", datadim.lng$vizit)
datadim.lng$vizit <- factor(datadim.lng$vizit,
levels(factor(datadim.lng$vizit))[c(6, 1:5)])
ggplot(datadim.lng, aes(x = vizit, y = gem, fill = Therapy.group))
geom_boxplot(position = position_dodge(width = 0.85), width = 0.8)
theme_classic()
stat_summary(
fun = median,
geom = 'line',
aes(group = Therapy.group, color = Therapy.group),
position = position_dodge(width = 0.85)
)
theme(axis.text = element_text(size = 10, face = 2))

uj5u.com熱心網友回復:
您可以使用stringr::str_wrapinsidescale_x_discrete來包裝標簽,并fct_inorder按照它們出現的順序將列轉換為有序因子。
datadim.lng %>%
mutate(vizit = fct_inorder(vizit)) %>% # convert to factor in order of appearance
ggplot(aes(x = vizit, y = gem, fill = Therapy.group))
geom_boxplot(position = position_dodge(width = 0.85), width = 0.8)
theme_classic()
stat_summary(
fun = median,
geom = 'line',
aes(group = Therapy.group, color = Therapy.group),
position = position_dodge(width = 0.85)
)
scale_x_discrete(labels = function(x) str_wrap(gsub("\\. ", " ", x), width = 5))
引數可以提供要使用的labels標簽或將應用于所有標簽的函式。在上面的代碼中,創建了一個函式,它首先將列中的點轉換為空格,然后str_wrap用于將單詞包裝成多行。(str_wrap如果單詞之間沒有中斷,將不起作用)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427668.html
