我有一個看起來像這樣的資料集
Telangiectasia_time grade0 grade1 grade2 gradeNA
<chr> <int> <int> <int> <int>
1 telangiectasia_tumour_0 2039 14 2 4
2 telangiectasia_tumour_1 2007 9 1 42
3 telangiectasia_tumour_12 1807 32 3 217
4 telangiectasia_tumour_24 1666 77 5 311
我想在 x 軸上繪制毛細血管擴張,因此有 4 個條形對應于 telangiectasia_tumour_0、telangiectasia_tumour_1、telangiectasia_tumour_12、telangiectasia_tumour_24。我希望條形通過 y 軸上的數字拆分。例如,對于 telangiectasia_tumour_0,0 級 chunck 為 2039,1 級為 14 等...
我嘗試了以下代碼:
ggplot(telangiectasia_tumour_data, aes(x=Telangiectasia_time)) geom_bar(position = "stack") theme_minimal()
但是,我只得到 4 個大條形,每個條形的總數 (2059)。但我希望根據成績拆分這些條形。

uj5u.com熱心網友回復:
樣本資料:
data=data.frame("Telangiectasia_time" = c("telangiectasia_tumour_0", "telangiectasia_tumour_1", "telangiectasia_tumour_12", "telangiectasia_tumour_24"),
"value"= c(2039, 2007, 1807, 1666, 14, 9, 32, 77, 2,1,3,5, 2, 42, 217, 311),
"grade" = c("grade0", "grade0", "grade0", "grade0", "grade1", "grade1", "grade1", "grade1",
"grade2", "grade2", "grade2", "grade2", "gradeNA", "gradeNA", "gradeNA" ,"gradeNA" ))
繪制資料:
ggplot(data, aes(Telangiectasia_time, y=value, x= Telangiectasia_time, fill=grade))
# labs(x="", y="", )
geom_bar(stat="identity")
labs(x="Telangiectasia_time", y="value", title="", fill="Grades")
theme_bw()
theme(plot.title = element_text(hjust = 0.5, face="bold", size=20, color="black"))
theme(axis.title.x = element_text(family="Times", face="bold", size=16, color="black"))
theme(axis.title.y = element_text(family="Times", face="bold", size=16, color="black"))
theme(axis.text.x = element_text( hjust = 1, face="bold", size=14, color="black", angle=30) )
theme(axis.text.y = element_text( hjust = 1, face="bold", size=14, color="black") )
theme(plot.title = element_text(hjust = 0.5))
theme(legend.title = element_text(family="Times", color = "black", size = 16,face="bold"),
legend.text = element_text(family="Times", color = "black", size = 14,face="bold"),
legend.position="right",
plot.title = element_text())

或與 facet_wrap()
data$Telangiectasia_time<-as.factor(data$Telangiectasia_time)
ggplot(data, aes(Telangiectasia_time, y=value, x= "", fill=grade))
geom_bar(stat="identity")
facet_wrap(~Telangiectasia_time)
labs(x="", y="value", title="", fill="Grades")
theme_bw()
theme(plot.title = element_text(hjust = 0.5, face="bold", size=20, color="black"))
theme(axis.title.x = element_text(family="Times", face="bold", size=16, color="black"))
theme(axis.title.y = element_text(family="Times", face="bold", size=16, color="black"))
theme(axis.text.x = element_text( hjust = 1, face="bold", size=14, color="black", angle=30) )
theme(axis.text.y = element_text( hjust = 1, face="bold", size=14, color="black") )
theme(plot.title = element_text(hjust = 0.5))
theme(legend.title = element_text(family="Times", color = "black", size = 16,face="bold"),
legend.text = element_text(family="Times", color = "black", size = 14,face="bold"),
legend.position="right",
plot.title = element_text())
theme(strip.text.x = element_text(size = 16, colour = "black",family="Times"))

uj5u.com熱心網友回復:
您需要將成績收集到名稱:值對中,然后按名稱分組,如下所示:
data %>%
pivot_longer(cols = starts_with('grade')) %>%
ggplot(aes(x = Telangiectasia_time, y = value, fill = name))
geom_bar(stat = 'identity')
theme_minimal()
uj5u.com熱心網友回復:
問題是你沒有以可識別的方式對 ggplot 的資料進行分組當我想做這種事情時,我在 ggplot 中使用填充或分組,它可以識別不同的類別(在這種情況下是成績)。為了讓它作業,我也重新組織了你的資料
您可能需要將值轉換為數字類才能正常作業
Telangiectasia_time <- c("telangiectasia_tumour_0", "telangiectasia_tumour_1", "telangiectasia_tumour_12", "telangiectasia_tumour_24")
value <- c(2039, 2007, 1807, 1666, 14, 9, 32, 77, 2,1,3,5, 2, 42, 217, 311)
grade <- c("grade0", "grade0", "grade0", "grade0", "grade1", "grade1", "grade1", "grade1",
"grade2", "grade2", "grade2", "grade2", "gradeNA", "gradeNA", "gradeNA" ,"gradeNA" )
data <- cbind(Telangiectasia_time, value, grade) %>% as.data.frame()
barplot <- data %>% ggplot(aes(Telangiectasia_time, value, fill = grade))
geom_bar(stat="identity", position="stack")

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/376492.html
上一篇:R:如何將每個單元格值(資料框)除以包含相應行和列總數的數量
下一篇:洗掉重復的單詞、逗號和空格
