我正在建立水柱的垂直剖面图。我的问题是点在x观测值上连接,而不是y观测值。在ggplot下,我知道geom_path可以做到这一点,但我不能使用ggplot,因为我想添加几个x轴。因此我使用plot()。 所以这就是我的尝试:
Storfjorden <- read.delim("C:/Users/carvi/Desktop/Storfjorden.txt")
smooF=smooth.spline(Storfjorden$Fluorescence,Storfjorden$Depth,spar=0.50)
plot(Storfjorden$Fluorescence,Storfjorden$Depth,ylim=c(80,0),type="n")
lines(smooF)
如您所见,点通过x观察连接。但是为了观察垂直剖面,我希望看到它们通过y观察连接起来。我尝试按深度排序(使用order())并且它不会影响结果。有人有线索吗?
如果作为替代方案,有人会想到如何在单个图(温度,盐度,荧光)上绘制不同轴的不同线,那么我可以使用geom_path()。谢谢!
**我可以回答一个新出现的问题,ggplot中是否有一种方法可以创建geom_smooth(),但是观察连接的顺序是它们出现而不是x轴?
ggplot(melteddf,aes(y=Depth,x=value))+geom_path()+facet_wrap
+(~variable,nrow=1,scales="free_x")+scale_y_reverse()
+geom_smooth(span=0.5,se=FALSE)
我尝试使用smooth.spline,但没有识别geom_path中的对象。谢谢!
答案 0 :(得分:0)
有一个原因导致ggplot2
难以在单个图上绘制多个x轴 - 它通常会导致难以阅读(或更糟,误导)的图形。如果您有一个激励性的示例,说明为什么您的示例不属于其中一个类别,则可能会让我们更多地了解更多详细信息。但是,下面是两个可能有用的解决方法。
这是一个快速的MWE来解决这个问题 - 如果你给我们的东西看起来像你的实际数据可能会更有帮助,但这至少会让事情变得非常不同(尽管没有结构,情节)相当凌乱。
请注意,我正在使用dplyr
进行多次操作,并将reshape2
melt
数据转换为长格式以便于绘制。
library(dplyr)
library(reshape2)
df <-
data.frame(
depth = runif(20, 0, 100) %>% round %>% sort
, measureA = rnorm(20, 10, 3)
, measureB = rnorm(20, 50, 10)
, measureC = rnorm(20, 1000, 30)
)
meltedDF <-
df %>%
melt(id.vars = "depth")
第一个选项是简单地使用facets来绘制彼此相邻的数据:
meltedDF %>%
ggplot(aes(y = depth
, x = value)) +
geom_path() +
facet_wrap(~variable
, nrow = 1
, scales = "free_x") +
scale_y_reverse()
第二个是标准化数据,然后绘制。在这里,我使用z-score,但是如果你有理由使用其他东西(例如缩放到#34;适当的&#34;你使用的任何变量的数量)你可以改变那个公式:< / p>
meltedDF %>%
group_by(variable) %>%
mutate(Standardized = (value - mean(value)) / sd(value) ) %>%
ggplot(aes(y = depth
, x = Standardized
, col = variable)) +
geom_path() +
scale_y_reverse()
如果您需要绘制多个站点,以下是一些包含站点的示例数据:
df <-
data.frame(
depth = runif(60, 0, 100) %>% round %>% sort
, measureA = rnorm(60, 10, 3)
, measureB = rnorm(60, 50, 10)
, measureC = rnorm(60, 1000, 30)
, site = sample(LETTERS[1:3], 60, TRUE)
)
meltedDF <-
df %>%
melt(id.vars = c("site", "depth"))
您可以使用facet_grid
(我的偏好):
meltedDF %>%
ggplot(aes(y = depth
, x = value)) +
geom_path() +
facet_grid(site~variable
, scales = "free_x") +
scale_y_reverse()
或将facet_wrap
添加到标准化图中:
meltedDF %>%
ggplot(aes(y = depth
, x = value)) +
geom_path() +
facet_grid(site~variable
, scales = "free_x") +
scale_y_reverse()