已有的方案没法绘制躺平的条形图,也不支持二维联表。所以我自己写了个函数,放在了 fecitr 包里:
默认风格:
remotes::install_github('pzhaonet/fecitr')
library(fecitr)
x <- txt_bar(value = VADeaths[1, ], label = colnames(VADeaths))
#> +------------------------------+
#> | Rural Male ######## 11.7 |
#> | Rural Female ###### 8.7 |
#> | Urban Male ########## 15.4 |
#> | Urban Female ##### 8.4 |
#> +------------------------------+
定制最小单位和表达字符:
x <- txt_bar(value = VADeaths[1, ], label = colnames(VADeaths),
quantum = 1, pch = '■')
#> +-----------------------------------+
#> | Rural Male ■■■■■■■■■■■■ 11.7 |
#> | Rural Female ■■■■■■■■■ 8.7 |
#> | Urban Male ■■■■■■■■■■■■■■■ 15.4 |
#> | Urban Female ■■■■■■■■ 8.4 |
#> +-----------------------------------+
2 x 2 表:
x <- txt_bar(value = VADeaths[1, ], label = c('Rural', '', 'Urban', ''),
quantum = 1, pch = c('■', '□'), legend = c('Male', 'Female'))
#> +----------------------------+
#> | Rural ■■■■■■■■■■■■ 11.7 |
#> | □□□□□□□□□ 8.7 |
#> | Urban ■■■■■■■■■■■■■■■ 15.4 |
#> | □□□□□□□□ 8.4 |
#> +----------------------------+
#>
#> Legend: ■ Male;□ Female
4 x 5 表:
vt <- t(VADeaths)
label <- rep(colnames(vt), each = nrow(vt))
label[duplicated(label)] <- ''
x <- txt_bar(value = as.vector(vt), label = label,
quantum = 2, pch = c('■', '□', '+', '='), legend = row.names(vt))
#> +-------------------------------------------------+
#> | 50-54 ■■■■■■ 11.7 |
#> | □□□□ 8.7 |
#> | ++++++++ 15.4 |
#> | ==== 8.4 |
#> | 55-59 ■■■■■■■■■ 18.1 |
#> | □□□□□□ 11.7 |
#> | ++++++++++++ 24.3 |
#> | ======= 13.6 |
#> | 60-64 ■■■■■■■■■■■■■ 26.9 |
#> | □□□□□□□□□□ 20.3 |
#> | ++++++++++++++++++ 37 |
#> | ========== 19.3 |
#> | 65-69 ■■■■■■■■■■■■■■■■■■■■ 41 |
#> | □□□□□□□□□□□□□□□ 30.9 |
#> | +++++++++++++++++++++++++++ 54.6 |
#> | ================== 35.1 |
#> | 70-74 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 66 |
#> | □□□□□□□□□□□□□□□□□□□□□□□□□□□ 54.3 |
#> | ++++++++++++++++++++++++++++++++++++ 71.1 |
#> | ========================= 50 |
#> +-------------------------------------------------+
#>
#> Legend: ■ Rural Male;□ Rural Female;+ Urban Male;= Urban Female
直方图:
xhist <- hist(iris$Sepal.Length, plot = FALSE)
label <- paste(xhist$breaks[1:(length(xhist$breaks)-1)], '-', xhist$breaks[2:length(xhist$breaks)])
txt_bar(xhist$counts, label, pch = '哈', add_box = FALSE)
#> 4 - 4.5 哈哈 5
#> 4.5 - 5 哈哈哈哈哈哈哈哈哈 27
#> 5 - 5.5 哈哈哈哈哈哈哈哈哈 27
#> 5.5 - 6 哈哈哈哈哈哈哈哈哈哈 30
#> 6 - 6.5 哈哈哈哈哈哈哈哈哈哈 31
#> 6.5 - 7 哈哈哈哈哈哈 18
#> 7 - 7.5 哈哈 6
#> 7.5 - 8 哈哈 6