r - 如何在ggplot2中转换辅助y轴和比例
问题描述
我有以下情节,ggplot2
但我对次要 y 轴的缩放方式不太满意,因为灰线看起来相当平坦。
我更愿意为次要 y 轴和灰线创建一个范围仅为 1.75 到 2.25 的比例,以便我可以更好地看到运动。关于如何做到这一点的任何建议?
library(tidyverse)
reserves_level <- structure(list(Date = structure(c(18291, 18321, 18351, 18382,
18412, 18443, 18473, 18504, 18535, 18565, 18596, 18626, 18657,
18291, 18321, 18351, 18382, 18412, 18443, 18473, 18504, 18535,
18565, 18596, 18626, 18657), class = "Date"), Key = c("Reserves (NAD)",
"Reserves (NAD)", "Reserves (NAD)", "Reserves (NAD)", "Reserves (NAD)",
"Reserves (NAD)", "Reserves (NAD)", "Reserves (NAD)", "Reserves (NAD)",
"Reserves (NAD)", "Reserves (NAD)", "Reserves (NAD)", "Reserves (NAD)",
"Reserves (USD)", "Reserves (USD)", "Reserves (USD)", "Reserves (USD)",
"Reserves (USD)", "Reserves (USD)", "Reserves (USD)", "Reserves (USD)",
"Reserves (USD)", "Reserves (USD)", "Reserves (USD)", "Reserves (USD)",
"Reserves (USD)"), Value = c(30.96107351507, 32.16872169411,
32.97394333811, 35.6594389906, 32.944455576, 31.75897192528,
35.3995709836, 33.3870647566, 32.66579275848, 34.35383925875,
29.92587, 31.7517, 33.35816, 2.06261398712043, 2.05295138288458,
1.84674175243683, 1.92451004045528, 1.87739090357876, 1.83355302380232,
2.08125035179437, 1.97135496109494, 1.95207290341642, 2.11488932754343,
1.94197, 2.10318, 2.20185)), row.names = c(NA, -26L), class = c("tbl_df",
"tbl", "data.frame"))
ggplot() +
geom_col(data = subset(reserves_level, Key %in% c("Reserves (NAD)")),
mapping = aes(x = Date, y = Value, fill = Key),
position = position_dodge()) +
geom_line(data = subset(reserves_level, Key == "Reserves (USD)"),
mapping = aes(x = Date, y = Value*15, group = Key, color = Key),
size = 2) +
scale_fill_manual(values = c('#7c3042','#c7af76')) +
scale_color_manual(values = c('grey')) +
theme_bw() +
scale_y_continuous(sec.axis= sec_axis(~./15, name="Reserves (USD)", breaks = seq(0,2.5, by = 0.25)))
解决方案
也许这可以帮助你
ylim.p <- c(0, 30)
ylim.s <- c(1.75, 2.25)
b <- diff(ylim.p)/diff(ylim.s)
a <- b*(ylim.p[1] - ylim.s[1])
ggplot() +
geom_col(data = subset(reserves_level, Key %in% c("Reserves (NAD)")),
mapping = aes(x = Date, y = Value, fill = Key),
position = position_dodge()) +
geom_line(data = subset(reserves_level, Key == "Reserves (USD)"),
mapping = aes(x = Date, y = (Value*b)+a, group = Key, color = Key),
size = 2) +
scale_fill_manual(values = c('#7c3042','#c7af76')) +
scale_color_manual(values = c('grey')) +
theme_bw() +
scale_y_continuous(sec.axis= sec_axis(~(. - a)/b, name="Reserves (USD)", breaks = seq(1.75,2.5, by = 0.25)))
推荐阅读
- javafx - JavaFX 进度指示器在重负载运行时停止旋转
- jquery - 如何将类添加到父 div?
- apache - Apache Solr 建议器和变音符号
- r - R context_eval(join(src), private$context) 中的错误:v8::Context 已被释放
- java - 无法使用java打印嵌套json中的所有非空值
- python - python 正则表达式在某些关键字之后查找第一个单词
- uima - 重置本地 ANNOTATION 变量?
- internationalization - 为什么内联/IRRE 记录得到 sys_language_uid=0?
- wordpress - 在 Wordpresss 中将按钮居中
- ssl - OPENSSL s_cient 请求失败(408 请求超时)