使用ggplot2创建躲避的条形图

时间:2018-12-04 14:57:08

标签: r ggplot2

我有以下数据集:

Database<-c("Composite","DB","TC","RH","DGI","DCH","DCH","DCH","LDP")
Unique_Drugs<-c(12672,5130,1425,3090,6100,2019,250,736,1182)
Unique_Targets<-c(3987,2175,842,2308,2413,1441,198,327,702)
db<-data.frame(Database,Unique_Drugs,Unique_Targets)

,我想创建一个躲避的条形图,如下图: enter image description here

此图来自如下数据框: enter image description here

区别在于,在x轴上,我想要7个唯一的Database名称,而fill参数应该是Unique_DrugsUnique_Targets,以便创建2个彩色条将显示其值。我不确定如何使其工作。

我的代码是:

 p <- ggplot(data = db, aes(Database)) +
          geom_bar(position = position_dodge(preserve = "single"), stat="count", aes(fill = colnames(db[2:4])), color = "black")+
          coord_flip()+
          theme(legend.position="top",
                legend.title=element_blank(),
                axis.title.x=element_text(size=18, face="bold", color="#000000"), # this changes the x axis title
                axis.text.x = element_text(size=14, face="bold", color="#000000"), #This changes the x axis ticks text
                axis.title.y=element_text(size=18, face="bold", color="#000000"), # this changes the y axis title
                axis.text.y = element_text(size=14, face="bold", color="#000000"))+ #This changes the y axis ticks text
          labs(x = "Database") +
          labs(y = "Value") +
          scale_x_discrete(limits = rev(factor(Database))) +
          scale_fill_manual("Databases", values = c("tomato","steelblue3"))

1 个答案:

答案 0 :(得分:1)

这是实现所需目标的一种方法:

library(reshape2)
ggplot(melt(db), aes(x = Database, y = value, fill = variable)) + 
  geom_col(position = "dodge") + ylab(NULL) + theme_minimal() +
  scale_fill_discrete(NULL, labels = c("Drugs", "Targets"))

enter image description here

如果您只想使用毒品的柱状图,则不需要melt,因为您可以使用y = Unique_Drugs来指定柱高(请注意,因为我们有高度,所以我们使用{{1 }}。但是,在这种情况下,我们要指定两种高度。您的 fill自变量应为geom_colUnique_Drugs 的字眼恰恰表明我们需要进行一些转换,因为Unique_Targets出于相同的美感不接受两个变量。因此,使用ggplot我们将所有高度作为一个变量,并为melt得到一个变量。