sjPlot::plot_xtab
是有用的工具,可以快速生成带有条形图上的计数和%标签的分组条形图。我一直遇到一个非常烦人的问题。 plot_xtab
正在重新排序并贴错我感兴趣的因子的水平。似乎正在发生的事情是,它按词汇顺序对水平进行排序,但随后却按照标签顺序将它们与实际的因子标签误标签了。当然,这是一个严重的问题。这是一个可复制的示例:
library(tidyverse)
library(forcats)
library(gtools)
library(sjPlot)
data("mtcars")
cars <- as_tibble(mtcars) %>%
mutate(carb_cat=case_when(carb <3~"Low", carb==3 | carb ==4~"Med", carb>4~"High"),
carb_cat=fct_relevel(carb_cat, "Low", "Med", "High"))
unique(cars$carb_cat)
cars$mpg_3 <- quantcut(cars$mpg, q=3)
plot_xtab(cars$mpg_3, cars$carb_cat, show.total = F)
[当我按cars$carb_cat
绘制cars$mpg_3
时,plot_xtab
重新排序并错误地标记了因子水平。如果将条形图的计数与下面的频率表进行比较,您会注意到,实际水平“高”在条形图和图例中被标记为“低”,“中”被标记为“高”,而“低”被标记为“低”。 ”标记为“中”。
cars %>% count(carb_cat)
carb_cat n
<fct> <int>
1 Low 17
2 Med 13
3 High 2
我现在已经使用实际数据多次遇到这个问题,plot_xtab
中没有一个似乎可以解决这个问题的论据。
似乎在最新版本的sjPlot中引入了一个错误(自2.8.2起)。在2.8.0版中,我得到了正确的图形:
library(tidyverse)
library(forcats)
library(gtools)
library(sjPlot)
data(mtcars)
cars <- mtcars %>%
mutate(carb_cat=case_when(carb <3~"Low",
carb==3 | carb ==4~"Med",
carb>4~"High"),
carb_cat=fct_relevel(carb_cat, "Low", "Med", "High"))
cars$mpg_3 <- quantcut(cars$mpg, q=3)
plot_xtab(cars$mpg_3, cars$carb_cat, show.total = F) +
ggtitle("sjPlot version 2.8.0")
carb_cat
mpg_3 Low Med High
[10.4,16.7] 2 8 1
(16.7,21.4] 5 5 1
(21.4,33.9] 10 0 0