首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用R中的对数轴和lin轴覆盖图

用R中的对数轴和lin轴覆盖图
EN

Stack Overflow用户
提问于 2019-04-19 02:11:13
回答 2查看 143关注 0票数 1

我正在尝试在同一个图上绘制两个数据集。这些集合具有相同的x值。其中一组应以对数刻度y绘制,另一组应以lin刻度绘制y。为此,将创建一个假数据集,格式为

代码语言:javascript
复制
library(pracma)
x<-logseq(0.1,100,60)
y1<-logseq(50,2000,60)
y2<-linspace(0,90,60)
d<-data.frame(x,y1,y2)

我基本上是试图从excel中重新创建这个图。日志空间点显示为红色,lin空间显示为蓝色。

到目前为止,我能在R中获得的最接近的方法是使用

代码语言:javascript
复制
scaleFactor<-max(d[,2])/max(d[,3])

Bode<-ggplot(data=d, aes(x=d[,1]))+
geom_point(aes(y=d[,2]), col="red")+
geom_point(aes(y=d[,3]*scaleFactor))+
scale_y_continuous(name="|Z|, ohm",
                   sec.axis=sec_axis(~./scaleFactor, name="Phase, deg."))+
scale_x_log10()+
theme_bw()+
ggtitle(plotTitle)+
labs(x="Frequency, Hz")+
theme(
  plot.title = element_text(hjust = 0.5),
  axis.title.y.left=element_text(color="red"),
  axis.text.y.left =element_text(color="red")
  )

它输出了下面的图表,显示了同一图表中的红色数据和黑色数据,但红色数据是在lin刻度上。

它很接近,但我真的需要红色数据在对数规模上。这个功能在ggplot2上是可用的吗?其他的图形库也很有帮助。

编辑后的图片更具可重复性。

EN

回答 2

Stack Overflow用户

发布于 2019-04-19 02:19:43

如果base::plot对您有效,则可以使用par(new=T)完成此操作

代码语言:javascript
复制
set.seed(1234)
data1 <- runif(10)
data2 <- runif(10)


par(mar=c(5.1,4.1,4.1,4.1))
plot(data1,col="red",pch=19,xlab="Index",ylab="Axis 1")
par(new=T)
plot(data2,col="blue",log="y",pch=19,axes=F,xlab="",ylab="")
axis(4)
mtext(text= "Axis 2",side = 4,line=2)

票数 0
EN

Stack Overflow用户

发布于 2019-04-20 04:21:43

我已经找到了一个可用的解决方案,通过获取其中一个数据集的对数,并在线性轴上重新绘制它。这样,两个y轴都是线性的,这是ggplot喜欢的,但数据显示了对数线性行为。

代码语言:javascript
复制
library(pracma)

x<-logseq(0.1,100,60)

y1<-logseq(50,2000,60)
y1<-log10(y1)

y2<-linspace(0,90,60)
d<-data.frame(x,y1,y2)

scaleFactor<-max(d[,2])/max(d[,3])


library(ggplot2)
Bode<-ggplot(data=d, aes(x=d[,1]))+
geom_point(aes(y=d[,2]), col="red")+
geom_point(aes(y=d[,3]*scaleFactor))+
scale_y_continuous(name="|Z|, ohm",
                   sec.axis=sec_axis(~./scaleFactor, name="Phase, deg."))+
scale_x_log10()+
theme_bw()+
labs(x="Frequency, Hz")+
theme(
  plot.title = element_text(hjust = 0.5),
  axis.title.y.left=element_text(color="red"),
  axis.text.y.left =element_text(color="red")
  )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55751643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档