簡體   English   中英

如何改善data.frame的條形圖?

[英]How to improve the resulted bar plot for data.frame?

我有兩個data.frame需要在單個網格中生成條形圖。 我獲得這些data.frame作為在R中對算法進行基准測試的結果。為此,獲取必須將兩個data.frame合並為一個的繪圖數據。 我已經在SO學習了此類問題的較早文章,並且對如何獲取條形圖有自己的見解。 但是,我得到的結果圖可讀性不強,我認為需要對代碼進行一些處理。 誰能指出我如何以更好的方式改善結果圖?

可復制的數據:

使用兩個cvs文件進行基准測試算法:

bnch_2 <- data.frame(
    test=c("s3","s7","s4" ,"s1" ,"s2" ,"s5" ,"s6" ,"s9","s8"),
    replications=c(10,10, 10, 10 ,10 ,10 ,10 ,10 ,10),
    elapsed=c(0.23,  0.28,  0.53 , 0.80 , 4.12 , 8.57 , 8.81 ,20.16 ,24.53),
    relative=c( 1.000 ,  1.217 ,  2.304 ,  3.478 , 17.913 , 37.261 , 38.304 , 87.652 ,106.652),
    user.self=c(0.23, 0.28 , 0.53 , 0.61 , 4.13 , 8.55 , 8.80 ,18.06 ,19.08),
    sys.self=c(0.00, 0.00 ,0.00, 0.00 ,0.00, 0.00 ,0.00 ,0.13, 0.51)
)

使用三個csv文件對同一算法進行基准測試:

bnch_3 <- data.frame(
    test=c("s3", "s7" ,"s4", "s1", "s5", "s6","s2", "s9","s8"),
    replications=c(10,10, 10, 10 ,10 ,10 ,10 ,10 ,10),
    elapsed=c( 0.34 , 0.47 , 0.70 , 2.41  ,8.26 , 8.75 , 9.03, 28.78 ,36.56),
    relative=c( 1.000 ,  1.382 ,  2.059  , 7.088 , 24.294 , 25.735 , 26.559  ,84.647 ,107.529),
    user.self=c(0.34 , 0.46  ,0.70 , 1.72 , 8.26 , 8.74  ,9.01, 26.24 ,30.95),
    sys.self=c(0.00 ,0.00 ,0.00, 0.12, 0.00 ,0.00 ,0.00, 0.12 ,0.77)
)

我使用bind_rows來獲取單個data.frame並可能以這種方式獲取條形圖:

library(dplyr)
library(ggplot2)

DF <- bind_rows(bnch_2, bnch_3)
ggplot(DF$elapsed, aes(factor(test))) + 
    geom_bar(stat="identity", position = "dodge")

但是我的代碼有一些問題,無法生成我想要的圖。 為了生成更具可讀性的條形圖,也許我增加了輸入數據的比例,以使圖易於區分。 我怎樣才能做到這一點?

這是我想要實現的理想情節:

在此處輸入圖片說明

如何改善獲取條形圖的代碼? 如何獲得所需的條形圖? 有什么想法嗎? 提前致謝 :)

您需要創建一個包含type的附加列,例如

DF = bind_rows(bnch_2, bnch_3, .id = "type")
# or add in the column
#DF$type = rep(c("A", "B"), each=9)

然后使用fill

g = ggplot(DF, aes(factor(test), elapsed)) + 
  geom_col(aes(fill = type), position = "dodge")

為了匹配示例情節的themetheme_tufte看起來很theme_tufte

library(ggthemes)
g +   theme_tufte()

為你帶來

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM