r - 如何创建中间有零线的多因素水平比例条形图?
问题描述
我想在 R 中创建图形(参见图像每个水平列代表从两种可能性中的选择以及这种情况的数量或比例)。我尝试了 likert 包,这里有可能只在一列中使用一个分类变量,但我在一列中需要两个(计数或比例)变量。我正在尝试的数据如下。每行一列,植物 1 在左边,植物 2 在右边,Total 是显示的案例数,Insect 是所有的总标题。你能推荐我合适的代码或包吗?
+--------+---------+--------+--------------+--------------+
| Insect | Plant1 | Plant2 | Total plant1 | Total plant2 |
+--------+---------+--------+--------------+--------------+
| SF | Maize | Cotton | 38 | 12 |
| SF | Cabbage | Cotton | 40 | 10 |
| SF | Cabbage | Maize | 42 | 8 |
+--------+---------+--------+--------------+--------------+
解决方案
你可以用ggplot2
.
带有代码的示例图:
data <- tibble(
Plant1 = c('Maize', 'Cabbage', 'Cabbage'),
Plant2 = c('Cotton', 'Cotton', 'Maize'),
TotalPlant1 = c(38, 40, 42),
TotalPlant2 = c(12, 10, 8)
)
data %>%
mutate(row = row_number()) %>%
gather('x', 'Plant', c(Plant1, Plant2)) %>%
mutate(
Total = if_else(x == 'Plant1', TotalPlant1, -TotalPlant2),
lab_pos = if_else(x == 'Plant1', Total + max(Total) * .02, Total - max(Total) * .02),
hj = if_else(x == 'Plant1', 0, 1)
) %>%
select(row, Plant, Total, lab_pos, hj) %>%
ggplot(aes(
x = row,
y = Total
)) +
geom_col(fill = 'transparent', color = 'black') +
geom_text(aes(
y = lab_pos,
hjust = hj,
label = Plant
)) +
geom_hline(yintercept = 0) +
coord_flip() +
xlab('') +
ylab('') +
scale_y_continuous(
breaks = seq(-20, 40, 10),
labels = seq(-20, 40, 10) %>% abs(),
expand = expand_scale(mult = c(.2, .2))
) +
theme(
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
panel.background = element_blank(),
axis.line.x = element_line()
)
推荐阅读
- aframe - 旋转事件处理 GLTF-MODEL
- r - R中数据框中的一组列乘以一列
- sql - 如何缓冲子组实际未更改的所有更改?
- reactjs - Next.js 服务器路由器的 asPath 属性等于静态文件路径
- django - Django:模型 TextChoices 上的 MultipleChoiceFilter
- vtiger - vtiger 7.3 尝试将图像保存在多个模块中的问题 - 例如联系人、产品、用户
- php - 如何将 Codeigniter 4 lang 文件加载到数组变量中
- facebook - 按见解过滤 Facebook 活动
- python - Tkinter TypeError:“StringVar”类型的参数不可迭代
- sql - DEFAULT is not allowed in this context 错误