如何在 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 )
谢谢!
一旦使用“绘图”基本函数,用户坐标就固定了。就像用墨水写字一样。以后不可能通过调用 axis 来翻转它们。这种体操需要更面向对象的方法,例如网格或 ggplot 系统。它们允许创建可以更新或修改的对象。如果你有一个 ggplot 对象,你可以这样做:
p + coord_flip()
为了在这方面轻松实现灵活性,我喜欢
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)
您刚刚得到了关于使用其他绘图库的两个不错的建议。我相信你的实际问题是你只将一个值向量传递给
plot
,你打算将其用作 x
值。但是当传递一个向量时, plot
假设您已经给了它 y
值。只需做类似的事情:
plot(x = value, y = 1:length(name),...)
你应该得到你想要的。
对于
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))
rev(c(0, 10))
与 c(10, 0)
是一样的。