翻转 R 图中的 X 和 Y 值(数据轴也发生变化)

问题描述 投票:0回答:4

如何在 R 中绘制绘图,使变量的值沿 X 轴显示,变量名称沿 Y 轴垂直显示? 最终,该图应看起来垂直,变量名称位于 Y 轴,变量值位于 X 轴。

下面的代码表面上可以做到这一点,但问题是实际的绘图值不会随轴翻转。 这意味着,该图的构造仍然类似于名称沿 X 轴而值沿 Y 轴。

以下变量:

value = 数字的列向量

name = 与每个数字对应的一列名称

plot(value, axes=F, xlab="", ylab= "", type= "b", xlim=c(-5, 50), ylim=c(0, 8))
axis(1)
axis(2, at = 1:length(name), labels = name, las=1, pos=-3.0,cex.axis=.65 )

谢谢!

r plot
4个回答
7
投票

一旦使用“绘图”基本函数,用户坐标就固定了。就像用墨水写字一样。以后不可能通过调用 axis 来翻转它们。这种体操需要更面向对象的方法,例如网格或 ggplot 系统。它们允许创建可以更新或修改的对象。如果你有一个 ggplot 对象,你可以这样做:

 p + coord_flip()

5
投票

为了在这方面轻松实现灵活性,我喜欢

lattice
包中的绘图功能:

 library(lattice)

 # First make some example data
 df <- data.frame(name=rep(c("a", "b", "c"), each=5), value=rnorm(15))

 # Then try plotting it in both 'orientations'
 # ... as a dotplot
 xyplot(value~name, data=df)
 xyplot(name~value, data=df)

 # ... or perhaps as a 'box-and-whisker' plot
 bwplot(value~name, data=df)
 bwplot(name~value, data=df)

如果需要,您也可以使用

base graphics
来绘制它,尽管您需要在轴标签上做一些工作:

plot(x=df$value, y=df$name, yaxt="n",
     xlab="value", ylab="name")
axis(2, at=1:3, labels=levels(df$name), las=1)

4
投票

您刚刚得到了关于使用其他绘图库的两个不错的建议。我相信你的实际问题是你只将一个值向量传递给

plot
,你打算将其用作
x
值。但是当传递一个向量时,
plot
假设您已经给了它
y
值。只需做类似的事情:

plot(x = value, y = 1:length(name),...)

你应该得到你想要的。


0
投票

对于

plot()
函数,您可以使用
rev()
函数反转轴限制。

Horizontal_Axis_Limits <- c(0, 10)

par(mfrow = c(1, 2))

plot(0, type = "n", xlim = Horizontal_Axis_Limits, ylim = c(0, 10))
polygon(c(2, 3, 6, 6, 2), c(2, 4, 8, 5, 2))

plot(0, type = "n", xlim = rev(Horizontal_Axis_Limits), ylim = c(0, 10))
polygon(c(2, 3, 6, 6, 2), c(2, 4, 8, 5, 2))

Example Figure

rev(c(0, 10))
c(10, 0)
是一样的。

© www.soinside.com 2019 - 2024. All rights reserved.