Something you can consider is a density plot that is staggered within the same plane, then facet by each factor so its more visible. With many factors this can be still hard, but at least you can crunch a lot of information in a tinier space this way. First I load three requisite libraries in the program R: tidyverse
for data wrangling, lavaan
for a the Holzinger data, and ggridges
for the ridge plot. The rest of the code is fairly specific and would require some familiarity with R, but it is just to show you how and what it will look like. I have added annotations in hashtags if that is helpful.
#### Load Libraries ####
library(lavaan)
library(tidyverse)
library(ggridges)
#### Plot Density by Stagger ####
HolzingerSwineford1939 %>% # take this data
as_tibble() %>% # make it easy to read
select(school,sex,7:15) %>% # select only these columns (7:15 are "X" items)
mutate(sex = ifelse(sex==1,"Male","Female")) %>% # change gender coding
pivot_longer(cols = 3:11) %>% # pivot data
ggplot(aes(x=value, # plot values of survey data here
y=name, # arrange by name
fill=factor(sex)))+ # fill color by sex
geom_density_ridges()+ # plot ridges
facet_grid(school~sex)+ # facet ridges by these factors
scale_fill_manual(values = c("darkred","hotpink"))+ # fill with these colors
theme_bw()+ # edit theme
theme(legend.position = "none")+ # remove legend (redundant)
labs(x="Value",
y="Name",
title = "By Gender Density of X Values") # label plot
You should get a plot like this. The y axis represents 9 different test items, while the frame labels represent which factor the densities belong to. You can now plainly see which items are skewed and how they skew based off each factor:

exp()
transformation is its inverse, but that is probably far too strong here. Squaring is a milder alternative. You don't say what sample size(s) you have. It is not obvious that the main problem is really left skewness, rather than a few moderate outliers in the left tail in B1. Is there no science here to throw light on this? $\endgroup$