按数据框中的百分比在ggplot中填充geom_bar
Fill geom_bar in ggplot by the percentage in the data frame
我正在尝试创建一个条形图,我可以根据第一行的平均值(0.3181555,这是一个百分比)用一种颜色填充条形,并用另一种颜色填充条形的其余部分颜色(0.6818445,第 2 行,第 3 列)以获得从 0 到 1 的条。这是我的数据:
View(int)
Lower_Conf Upper_Conf Mean Lower_Pred Upper_Pred
1 0.3154548 0.3208561 0.3181555 0.3125413 0.3237696
2 0.6845452 0.6791439 0.6818445 0.6874587 0.6762304
我的代码是这样的:
ggplot(int,aes(x=1, y=int[1,3],fill=factor(Mean)))+
geom_bar(position="fill", stat = "identity", width = 1.2)
而且我知道我说 fill=factor(Mean)
是不正确的,它只是用一种颜色填充了条形图的 50%,用另一种颜色填充了其余部分,我知道这是因为我正在填充一个当我只有两个时(因为我的数据中只有 2 个数字),按“级别”栏。但是我不知道如何用我的数据框中的值来填充。
我认为这可以帮助你(你也可以像你想要的那样过滤特定变量,这里我包括了你数据中的所有变量):
library(reshape2)
library(ggplot2)
#Data
df <- structure(list(Lower_Conf = c(0.3154548, 0.6845452), Upper_Conf = c(0.3208561,
0.6791439), Mean = c(0.3181555, 0.6818445), Lower_Pred = c(0.3125413,
0.6874587), Upper_Pred = c(0.3237696, 0.6762304)), class = "data.frame", row.names = c("1",
"2"))
代码:
#Create id per row
df$id <- 1:dim(df)[1]
#Melt
df.melted <- melt(df,id.vars = 'id')
df.melted$id <- factor(df.melted$id)
df.melted$id <- relevel(df.melted$id,ref = '2')
#Plot
ggplot(df.melted,aes(x=variable,y=value,fill=id,label=round(value,3)))+
geom_bar(stat = 'identity')+
geom_text(position = position_stack(vjust=0.5))+
scale_fill_manual(values=c('cyan3','tomato'),guide = guide_legend(reverse=TRUE))
输出:
我正在尝试创建一个条形图,我可以根据第一行的平均值(0.3181555,这是一个百分比)用一种颜色填充条形,并用另一种颜色填充条形的其余部分颜色(0.6818445,第 2 行,第 3 列)以获得从 0 到 1 的条。这是我的数据:
View(int)
Lower_Conf Upper_Conf Mean Lower_Pred Upper_Pred
1 0.3154548 0.3208561 0.3181555 0.3125413 0.3237696
2 0.6845452 0.6791439 0.6818445 0.6874587 0.6762304
我的代码是这样的:
ggplot(int,aes(x=1, y=int[1,3],fill=factor(Mean)))+
geom_bar(position="fill", stat = "identity", width = 1.2)
而且我知道我说 fill=factor(Mean)
是不正确的,它只是用一种颜色填充了条形图的 50%,用另一种颜色填充了其余部分,我知道这是因为我正在填充一个当我只有两个时(因为我的数据中只有 2 个数字),按“级别”栏。但是我不知道如何用我的数据框中的值来填充。
我认为这可以帮助你(你也可以像你想要的那样过滤特定变量,这里我包括了你数据中的所有变量):
library(reshape2)
library(ggplot2)
#Data
df <- structure(list(Lower_Conf = c(0.3154548, 0.6845452), Upper_Conf = c(0.3208561,
0.6791439), Mean = c(0.3181555, 0.6818445), Lower_Pred = c(0.3125413,
0.6874587), Upper_Pred = c(0.3237696, 0.6762304)), class = "data.frame", row.names = c("1",
"2"))
代码:
#Create id per row
df$id <- 1:dim(df)[1]
#Melt
df.melted <- melt(df,id.vars = 'id')
df.melted$id <- factor(df.melted$id)
df.melted$id <- relevel(df.melted$id,ref = '2')
#Plot
ggplot(df.melted,aes(x=variable,y=value,fill=id,label=round(value,3)))+
geom_bar(stat = 'identity')+
geom_text(position = position_stack(vjust=0.5))+
scale_fill_manual(values=c('cyan3','tomato'),guide = guide_legend(reverse=TRUE))
输出: