r - 如何绘制同一 DataFrame 中 3 个向量的百分比变化?
问题描述
我有三个向量和犯罪清单。每个罪行代表一行。在每一行上,每个向量标识了与上一年相比,每种类型的事件数量的百分比变化。
以下是可重现的示例。不幸的是, df 采用第一个值并在列中重复(这是我的第一个可重现的示例)。
crime_vec = c('\tSTRONGARM - NO WEAPON', '$500 AND UNDER', 'ABUSE/NEGLECT: CARE FACILITY', 'AGG CRIM')
change15to16vec = as.double(825, -1.56, -66.67, -19.13)
change16to17vec = as.double(8.11, .96, 50, 4.84)
change17to18vec = as.double(-57.50, 1.29, 83.33, 28.72)
df = data.frame(crime_vec, change15to16vec, change16to17vec, change17to18vec)
df
我需要一个图表,该图表将采用正确的数据框,沿 y 轴显示犯罪,并在闪避的条形图中显示 x 轴上的所有 3 个百分比变化向量。我见过的例子只绘制了两个向量。我试过 plot()、geom_bar、geom_col,但只能得到一列来绘制(偶尔)。
任何补救建议都会有所帮助。
解决方案
不确定这是否是您要查找的内容:
library(tidyr)
library(ggplot2)
df %>%
pivot_longer(-crime_vec) %>%
ggplot(aes(x = value, y = crime_vec, fill = as.factor(name))) +
geom_bar(stat = "identity", position = "dodge") +
theme_minimal() +
xlab("Percentage Change") +
ylab("Crime") +
labs(fill = "Change from")
使用ggplot2
它是必要的,将您的数据变成长格式。geom_bar
应该创建您想要的情节。
推荐阅读
- python - 如何在 Windows 上通过 ID 访问网络摄像头流
- javascript - Vue - 根据父数据的状态渲染组件
- java - 关于Java中的引用传递(内存地址)的问题
- java - 在 mvp arch 中传递对象
- sql-server - Netezza 从 SQL Server 加载表
- java - 'minOccurs' 和 'maxOccurs' 属性值将如何在 WSDL 文件的 `element` 标记内生成?
- javascript - NodeJs Console.log 不输出结果
- node.js - 如何使用 Nginx docker 作为反向代理在两个不同的容器之间进行路由?
- c++ - 未定义的对带有 Gdi32.lib 链接的“TextOutW@20”的引用
- python - 向 Dask 分布式集群提交任务时本地 python 文件导入问题