ggplot2 geom_plot值在同一个栏中

ret*_*atu 6 r data-visualization ggplot2

我正在尝试在上绘制一个特定的图形.我想这样的情节:

在此输入图像描述

我的代码是:

library("ggplot2")

exec <- data.frame(
threads = c(2,4,8,16,32,64,2,4,8,16,32,64,2,4,8,16,32,64,2,4,8,16,32,64), 
msgs=c(100,100,100,100,100,100,400,400,400,400,400,400,1600,1600,1600,
       1600,1600,1600,6400,6400,6400,6400,6400,6400),
qtds=c(3778.2,6000,6000,6000,6000,6000,3756.6,7462.8,14666.2,24000,24000,24000,
       3762.4,7445.4,14284.4,27869.8,55877.4,93407.4,2934,5427.4,10717.6,17214.2,
       26222.2,37333.6))

ggplot(data=exec, aes(x=threads, y=qtds, fill=msgs)) + geom_bar(stat="identity", 
       position="dodge")
Run Code Online (Sandbox Code Playgroud)

但是,所有msgs都在同一个栏中,如图所示.

在此输入图像描述

我如何解决它?

Pab*_*van 6

您需要将整数转换为因子.使用as.factor()进行转换.

library("ggplot2")

exec <- data.frame(threads = c(2,4,8,16,32,64,2,4,8,16,32,64,2,4,8,16,32,64,2,4,8,16,32,64),  msgs=c("100 msg/min","100 msg/min","100 msg/min","100 msg/min","100 msg/min","100 msg/min","400 msg/min","400 msg/min","400 msg/min","400 msg/min","400 msg/min","400 msg/min","1600 msg/min","1600 msg/min","1600 msg/min","1600 msg/min","1600 msg/min","1600 msg/min","6400 msg/min","6400 msg/min","6400 msg/min","6400 msg/min","6400 msg/min","6400 msg/min"),
        qtds=c(3778.2,6000,6000,6000,6000,6000,3756.6,7462.8,14666.2,24000,24000,24000,3762.4,7445.4,14284.4,27869.8,55877.4,93407.4,2934,5427.4,10717.6,17214.2,26222.2,37333.6))

ggplot(data=exec, aes(x=as.factor(threads), y=qtds, fill=msgs)) +
geom_bar(stat="identity", position="dodge") +
scale_fill_discrete(name = "Msgs") +
  xlab("Threads") +
  ylab("Qtds") +
  theme_bw() +
  theme(legend.position = c(0.22,0.85))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 你需要按顺序排序.所以我们可以使用"级别".我们走吧!!创建一个值为msgs的表:`msg < - table(exec $ msgs)`获取命名的名称:`msg_level < - names(msg)[c(1,3,2,4)]`创建一个新列在exec df中,msgs的命令级别为:`exec $ msgs_level < - factor(exec $ msgs,levels = msg_level)`,现在你在ggplot代码中使用它:`fill = msgs_level` (2认同)