【发布时间】:2019-08-14 06:37:03
【问题描述】:
我想将次轴从 0 固定到 1,因为概率始终在 0 到 1 的范围内。但是,根据数据,如果最大回报 (y) 很高(如下图所示, 6%),那么次y轴的比例会超过1(因为它依赖于主y轴),这不是一个理想的演示情况。我应该如何限制辅助 y 轴的最大比例?
我听说ggplot 仍然不允许我们限制辅助轴的比例,但我不确定是否正确。是否有任何其他方法可以限制辅助 y 轴的比例,以便图表上显示的最大概率始终为 1 或小于 1,这取决于最大回报。请注意,代码中显示的 y 是返回值。
y <- c(0.01, -0.005, 0.06)
Month <- c("Jan", "Feb", "Mar")
dtf <- data.frame(Month, y)
require(reshape)
dtf2 <- melt(dtf)
dtf2[["sign"]] = ifelse(dtf2[["value"]] >= 0, "positive", "negative")
Probability <- c(0.4,0.22,0.54)
dtf2 <- data.frame(dtf2, Probability)
dtf2 %>>% ggplot() +
geom_bar(mapping = aes(x=Month, y=value, fill = sign), stat ="identity", width = 0.75)+
geom_point(mapping = aes(x=Month, y=Probability/20-0.025), size = 2.5, color="blue")+
geom_line(mapping = aes(x=Month, y=Probability/20-0.025, group = 1), color = "blue", size = 1)+
geom_hline(yintercept=0)+
geom_text(aes(x=Month, y=value, label = paste(y * 100,"%"), vjust = ifelse(y >= 0, -0.5, 1.2)), hjust = 0.5)+
ylab("\nReturn")+
theme(axis.text.x = element_text(face = "bold", size=11),
axis.text.y = element_text(face = "bold"),
axis.title.x=element_blank(),
legend.position = "none",
plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))+
theme(panel.background = element_blank(),
axis.ticks.x = element_blank()) +
theme(axis.line.y = element_line(color="black", size = 0.5))+
scale_y_continuous(labels=scales::percent, sec.axis = sec_axis(~(. + 0.025)*20, name = "Probability\n" ))+
scale_fill_manual(values = c("positive" = "black", "negative" = "red"))
如果回报较低,我希望辅助 y 轴的最大比例始终为 1 或小于 1。请给点建议,谢谢!
【问题讨论】:
-
这种图正是ggplot2中副轴如此困难的原因。哈德利(正确地)不想支持这一点。
-
你有什么建议我应该如何通过使用 R 中的其他函数而不是 gglot 来准确地绘制这个图?
-
我个人的看法是你不应该创建这个图表。因此,我不会努力向您展示如何使用基本图形来做到这一点。也许其他人会愿意。
-
我完全同意@Roland。也许可以进一步说明这一点:假设如何解释 6% 超过概率尺度上的 100% 的条形图?左标尺和右标尺之间究竟有什么联系?读者如何知道何时选择哪个比例?我建议看看这里:stackoverflow.com/a/3101876/5892059
-
正确比例显示的概率实际上是获得正回报的概率。所以在这种情况下,3月份得到正回报的概率是0.54,2月份得到正回报的概率是0.4。情节是客户要求的,他们想让我把两个情节结合起来,所以我别无选择。当然,实际数据不是这样的,所以可能没有意义。如果有任何建议将不胜感激