如何裁剪极坐标图

4

我试图绘制一些高程数据(通常在-90度至90度之间),并且我已经使用了coord_polar在某种程度上成功。看一下这段代码:

library(ggplot2)
#
r = c(2:8)*20
e = c(-4:9)*10
a = c(0:71)*5

points = expand.grid(r,e,a)
colnames(points) = c("distance", "elevation", "azimuth")
points$elevation[points$elevation <0] = points$elevation + 360

forEle = subset(points, azimuth == 0)


#ele_range = 
ggplot(forEle, aes( x=elevation, y=distance))+
geom_point()+
coord_polar(theta = "x", start = -1.5708, direction = -1)+
scale_y_continuous(breaks = c(0:16)*10, limits=c(0, 160)) +
scale_x_continuous(breaks=seq(0, 359, by=30), labels=c(expression(0^degree), expression(30^degree), expression(60^degree), expression(90^degree), expression(60^degree), expression(30^degree), expression(0^degree), expression(-30^degree), expression(-60^degree), expression(-90^degree), expression(-60^degree), expression(-30^degree)), limits=c(0, 360)) +
labs(title = "",
        x = "x",
        y = "y")+
theme(legend.position="bottom")

我的第一个难点是尝试将负角度映射到图表上(我通过将360度添加到所有负值来实现),但我想知道是否有更好的方法。其次,更重要的是,我想将输出从-90度到90度进行剪裁(或限制),即图表的右侧,但我一直无法做到。非常感谢任何关于这个问题的帮助。


你有一个可以用来复制问题(并测试解决方案)的样本数据集吗?另外,关于输出剪辑,你尝试过使用xlim()函数吗? - metasequoia
嗨,谢谢。回答你的第一个问题,我提供的代码创建了一个从0到360度的图形,我想要的是相同的图形,但是从-90到90度进行“缩放”。至于你的第二个问题,是的,我尝试过xlim()但没有成功。 - julovi
@julovi:你所说的“放大”,是指你只想让图表的右侧包含点,还是说径向变量应该从-90到90? - mitchus
我的意思是角度变量应该在-90到90之间。径向变量无所谓。 - julovi
1个回答

1
我有点晚到现场,但你的意思是这样的吗?

enter image description here

它也可以在整个圆周内以-90至90的角度完成。

enter image description here

第一个是:“

对于第一个:


scale_x_continuous(limits=c(-180,180),breaks=seq(-90, 90, 45))

第二个是:“对于第二个:”
scale_x_continuous(limits=c(-90,90),breaks=seq(-90, 90, 45))

谢谢!虽然这不是我要的,但你的图表仍然显示了一个完整的圆,而我只想剪裁输出“从南极到北极”的部分。 - julovi
你可以通过在coord_polar()中添加start=some angle来调整零点的起始位置,但是你不能剪切圆的任何部分。如果你想要半圆形,你必须使用图像编辑程序来剪切出一半的圆形。 - Christie Haskell Marsh
1
实际上,显然你可以:https://dev59.com/hmEh5IYBdhLWcg3wbjLc#22418817 - Christie Haskell Marsh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接