r - 如何缩放具有广泛范围的变量并在 ggplot 的单个图中显示相同的变量
问题描述
我创建了以下数据框
# Create a dataframe
Column1 <- c(1:30)
Column1 <- paste0('Month_', as.character(Column1))
paste0('Column', as.character(Column1))
Variable <- c("A", "B", "C", "D", 'E')
DF <- data.frame(Column1, Variable)
DF$value <- 0
DF$value[DF$Variable == "A"] <- runif(length(DF$value[DF$Variable == "A"]),
min = 10000, max = 50000)
DF$value[DF$Variable == "B"] <- runif(length(DF$value[DF$Variable == "A"]),
min = 100, max = 500)
DF$value[DF$Variable=="C"] <- runif(length(DF$value[DF$Variable=="A"]),
min = 100, max = 500)
DF$value[DF$Variabl e== "D"] <- runif(length(DF$value[DF$Variable == "A"]),
min = 100, max = 500)
DF$value[DF$Variable == "E"] <- runif(length(DF$value[DF$Variable=="A"]),
min = 100, max = 500)
接下来我导入了库来创建图表
# We now import the libraries
library(readxl)
require(plotly)
require(reshape2)
require(ggplot2)
require(janitor)
# We now create a chart
p1 <- ggplot(data = DF, aes(x = Column1, y = value, colour =
Variable)) +
geom_bar(data = DF[DF$Variable == "A",], aes(x = Column1, y = value,
fill=Variable), stat = 'identity') +
scale_y_continuous("New", sec.axis = sec_axis(~./10, name = "Value"),
position = "left") +
geom_line(data = DF[DF$Variable!="A",], aes(x = Column1, y = value,
fill = Variable))
p1
该代码可以正常工作。但是,我无法可视化在同一个图表中与条形图一起创建的折线图。我已尝试调整比例,但无法使其正常工作。我可以请求一些指导。
解决方案
像下面这样的东西可能会做你想要的。
首先,我将重新制作数据集,这次设置 RNG 种子。
set.seed(4821) # Make the code reproducible
Column1 <- paste0('Month_', 1:30)
Variable <- c("A", "B", "C", "D", 'E')
DF <- data.frame(Column1, Variable)
nA <- sum(DF$Variable == "A")
DF$value <- 0
DF$value[DF$Variable == "A"] <- runif(nA, min = 10000, max = 50000)
DF$value[DF$Variable == "B"] <- runif(nA, min = 100, max = 500)
DF$value[DF$Variable == "C"] <- runif(nA, min = 100, max = 500)
DF$value[DF$Variable == "D"] <- runif(nA, min = 100, max = 500)
DF$value[DF$Variable == "E"] <- runif(nA, min = 100, max = 500)
现在是图表。请注意,我已将辅助 y 轴的比例从10
更改为100
。
library(ggplot2)
DFA <- subset(DF, Variable == "A")
DFX <- subset(DF, Variable != "A")
scale_y <- 100
p1 <- ggplot(DF) +
geom_bar(data = DFA, aes(x = as.integer(sub("Month_", "", Column1)), y = value, fill = Variable), stat = 'identity') +
geom_line(data = DFX, aes(x = as.integer(sub("Month_", "", Column1)), y = scale_y*value, colour = Variable)) +
scale_y_continuous("New", sec.axis = sec_axis(~./scale_y, name = "Value"), position = "left") +
scale_x_discrete("Column1", labels = as.integer(sub("Month_", "", Column1)))
p1
推荐阅读
- sql - 如何将 varchar 列表传递给 Oracle 中的过程?
- vuetify.js - Vuetify Snackbar:点击不会调用我的函数
- macros - 如何将宏的列表参数转换为经过大量修改但引用的列表?
- javascript - 使用淘汰赛和 json 列表我如何为列表中的每个项目显示一个复选框,然后仅在选中时显示它
- python - Python 创建文件夹树
- python - 为什么python中的beautifultable不适合表格的内容?
- git - Flutter:如何获取 Firebase 插件的 GitHub 主版本
- node.js - 无法在 VSCode 上调试 Typescript
- javascript - Quick.db discord.js
- python - 我怎样才能从bloomberg 上抓取这张表并获得一个pandas 数据框?