我正在尝试使用特定投影(称为 aitoff)在地图上绘制 ggplot2 (v3.3.2) 数据点,这对于天空图尤其有用。
这样做时,图会在 x 轴上“裁剪”,即轴的边缘位于图的外部。我尝试了一些事情(例如调整边距),但没有成功。你能帮忙让这部分情节可见吗?
这是重现问题的代码,即位于 (0,0) 的点不可见。
skydata <- data.frame(RA=c(0,180,360), Dec=c(0,10,20))
ggplot(skydata) +
geom_point(aes(RA,Dec)) +
coord_map(projection="aitoff",orientation=c(90,180,0)) +
scale_y_continuous(breaks=(-2:2)*30,limits=c(-90,90)) +
scale_x_continuous(breaks=(0:8)*45,limits=c(0,360), labels=c("","","","","","","","","")) +
labs(x="R.A.(°)", y="Decl. (°)",title="Map of the sky")
Run Code Online (Sandbox Code Playgroud)
我希望我说得够清楚了……非常感谢!
我认为剪裁首先发生是一个已知问题。哈德利在 Github 问题中说道:“我认为这是一个长期存在的问题,我不太可能在不久的将来解决”
\n我认为有两种方法,你或多或少可以自己解决问题。@Arnaud\n 已经提到了一种解决方案(但这两种解决方案都有缺点)
\n添加clip = "off"在coord_map
添加expand = c(1.1,0)在scale_x_continuous
我为您添加了一些示例图,您可以在其中看到结果和问题。
\n1.初始版本(如果我运行你的代码):
\n\n问题:无法正确看到 (0,0) 处的点。
\n2. 扩展版本:
\nskydata <- data.frame(RA=c(0,180,360), Dec=c(0,10,20))\nggplot(skydata) + \n geom_point(aes(RA,Dec)) +\n coord_map(projection="aitoff", orientation=c(90,180,0)) + \n scale_y_continuous(breaks=(-2:2)*30,limits=c(-90,90)) + \n scale_x_continuous(breaks=(0:8)*45,limits=c(0,360), ,expand = c(1.1, 0), labels=c("","","","","","","","","")) +\n labs(x="R.A.(\xc2\xb0)", y="Decl. (\xc2\xb0)",title="Map of the sky")\nRun Code Online (Sandbox Code Playgroud)\n\n现在看起来相当不错。x 轴向两侧扩展,(0,0) 中的点现在清晰可见。
\n但注意力似乎只适用于自然数(例如expand = c(5,0))。为了1.1我在示例中选择的图,该图有些不同,并且 y 轴似乎扭曲了。
3.带clip =“off”的版本:
\nskydata <- data.frame(RA=c(0,180,360), Dec=c(0,10,20))\nggplot(skydata) + \n geom_point(aes(RA,Dec)) +\n coord_map(projection="aitoff", clip = "off", orientation=c(90,180,0)) + \n scale_y_continuous(breaks=(-2:2)*30,limits=c(-90,90)) + \n scale_x_continuous(breaks=(0:8)*45,limits=c(0,360), labels=c("","","","","","","","","")) +\n labs(x="R.A.(\xc2\xb0)", y="Decl. (\xc2\xb0)",title="Map of the sky")\nRun Code Online (Sandbox Code Playgroud)\n\n此版本不会扩展 x 轴,但它确保 (0,0) 处的点不会被剪掉。y 轴绝对没有变形。但看起来不如使用扩展的解决方案好。
\n