2

我有一个简单的两个变量数据框,其中第三个变量作为一个因素

DF <- data.frame(Depth = c(8.6, 19.6, 42.6, 60.6, 79.4, 101.4, 121.4, 137.6, 163, 180),
       Rb = c(103, 59, 99, 53, 107, 87, 52, 33, 105, 49),
       Litho = as.factor(c(1,2,1,2,1,1,2,2,1,2)))

我想创建一个绝对值的条形图,所以我使用geom_col(). 我想将 Rb 绘制为深度的函数,因此深度应该是离散变量。但是,当我使用

ggplot (DF, aes(x=Depth, y=Rb))+
geom_col()

该图有水平条,显示每个离散 Rb 读数的深度。我想查看每个离散深度处的 Rb 值。 在此处输入图像描述 颠倒 x 和 y 会出现同样的问题,只是使用竖线

ggplot (DF, aes(x=Rb, y=Depth))+
geom_col()

在此处输入图像描述 我也尝试过同样的geom_bar(stat = 'identity')方法,但仍然是同样的问题。

编辑 - 如果有人能解释为什么,这工作

ggplot (DF, aes(x=Depth, y=Rb/10, fill=Litho)) +
geom_bar(stat='identity') +
labs(x="Depth", y="Rb") +
scale_x_continuous (trans = "reverse") +
scale_y_continuous (position = "right") +
coord_flip()

出于某种原因,将 Rb 值除以 10 可以解决问题?除以任何大于 2 的数字有效,但如果除以 1 或 2(Rb、Rb/1 或 Rb/2),它会像上图中那样对数据进行分组,并且条形是垂直的,而不是水平的? 在此处输入图像描述 谢谢,杰里米

4

2 回答 2

2

geom_col()您可以使用参数强制定向"orientation"

来自?geom_col

orientation 层的方向。默认值 ( NA) 自动根据美学映射确定方向。在极少数情况下失败的情况下,可以通过设置orientation"x"or来明确给出"y"

[ geom_col] 以不同方式处理每个轴,因此可以有两个方向。通常,方向很容易从给定映射和使用的位置比例类型的组合中推断出来。因此,ggplot2 默认会尝试猜测图层应该具有的方向。在极少数情况下,方向不明确,猜测可能会失败。在这种情况下,可以使用参数直接指定方向orientation,该参数可以是"x""y"。该值给出了 geom 应该沿着的轴,这"x"是您期望 geom 的默认方向。

另请参阅问题Unexpected (?) orientation with geom_col中的讨论。

ggplot (DF, aes(x = Depth, y = Rb)) +
  geom_col(orientation = "x")

在此处输入图像描述

于 2020-05-31T18:57:56.913 回答
0

根据您的图像,我尝试构建您正在寻找的输出:

ggplot(DF, aes(x=rank(Depth), y=Rb, fill=Litho)) +
  geom_bar(stat="identity") +
  labs(x="Depth", y="Rb") + 
  scale_x_continuous(breaks=seq(0,15,1), trans = "reverse") +
  scale_y_continuous(position="right") +
  coord_flip(xlim=c(0,15)) +
  theme(panel.grid.major.y = element_blank(), 
        panel.grid.major.x = element_line(colour = "grey50"))

结果是
绘图

使用scale_fill_brewer(palette="Paired") +是由 给出的颜色主题RColorBrewer::display.brewer.all()

最后一次尝试

我只是在猜测你真正想要什么。对我上面显示的代码的修改

ggplot(DF, aes(x=Depth, y=Rb, fill=Litho)) +
  geom_bar(stat="identity") +
  labs(x="Depth", y="Rb") + 
  scale_x_continuous(breaks=seq(0,200,50), trans = "reverse") +
  scale_y_continuous(position="right") +
  coord_flip(xlim=c(0,200)) +
  theme(panel.grid.major.y = element_blank(), 
        panel.grid.major.x = element_line(colour = "grey50"))
于 2020-05-25T17:16:59.533 回答