【问题标题】:Two y axes for the same data - but different scale [duplicate]相同数据的两个y轴-但比例不同[重复]
【发布时间】:2018-12-05 12:50:42
【问题描述】:

我创建了一个图表,以线性单位但以对数 y 比例显示数据(代码如下)。

ggplot() + 
  geom_point(data=VH_lin, aes(x=VH_lin[,1], y=VH_lin[,2], colour = "green"), size=0.6) +
  scale_y_log10(breaks = c(0,0.01, 0.10, 1.00, 10), limit=c(-0.01,10)) + scale_x_continuous(breaks=c(0, 2000, 4000, 6000, 8000, 10000, 12000)) + 
  xlab("x") + ylab("y") +
  theme(panel.background = element_rect(fill = "white", colour = "grey50")) 

我想以分贝为单位添加第二个 y 刻度 - 这是对数单位。要转换数据,我必须计算 10*log10(x),因此绘图上的数据分布应该相同 - 因为 dB 是对数的。 基本上,我想使用两个单位在同一个地块上呈现 dame 数据: 线性(但以对数刻度表示 - 已在代码中)和 dB。可能吗?下面的图片(差)展示了我的想法。

VH_lin 数据示例:

1 0 0.012729834
2 3.133577295 0.012729834
10 14.75257582 0.013739633
36 59.10725461 0.014644137
41 69.42152155 0.0103109
466 1180.242805 0.011991354
486 1204.63381 0.008985861
520 1256.814223 0.008706877

【问题讨论】:

  • 您查看过sec_axis 帮助页面吗?寻求帮助时,您应该包含一个简单的reproducible example 和示例输入,可用于测试和验证可能的解决方案。
  • 我以前没有看过 sec_axis,但它看起来是我需要的。但是,我不知道如何正确应用 10*log10() 转换...我已经编辑了我的问题并添加了一些数据示例。

标签: r ggplot2 axis


【解决方案1】:

您可以添加第二个轴,同时将数据点保持在原始比例,如下所示:

ggData <- data.frame(x=rnorm(50), y=rnorm(50, mean=1000, sd=50) )
summary(ggData)

ggplot(ggData, aes(x=x, y=y) ) + 
 geom_point() + 
 scale_y_continuous(sec.axis = ~ 10*log10(.))

【讨论】:

  • 没有ggplot可以做到这一点吗? (对不起,我有大量使用香草情节例程的遗留情节调用,我不愿意切换到 ggplot。将来,我可能应该从 ggplot 开始......)这将很有用,例如,绘图温度,您可以同时以 F 和 C 表示温度(或以英尺与厘米、磅与公斤等为单位的长度。谢谢
【解决方案2】:

如果要添加与前一个相同比例的第二个y轴,可以这样实现:scale_y_log10(sec_axis = sec_axis(~.*, name="dB")

【讨论】:

  • 能否请您也解决将 y 值转换为 10*log10(y) 的问题?这是这个问题的主要问题,但使用上面的公式我不会解决它。
猜你喜欢
  • 2018-08-17
  • 1970-01-01
  • 2021-11-26
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
相关资源
最近更新 更多