将水平图上的数字刻度线更改为字母

发布于 2024-11-14 18:23:05 字数 446 浏览 4 评论 0原文

我正在研究我的地块的一些细节,但我发现了一个我无法绕过的细节。我的关卡上有数字刻度线。现在我希望 y 轴上的刻度线更改为相应的字母。 (即1 = A,5 = E,27 = AA,29 = AC,...)

我已经使用过

scales=list(
    y=list(alternating=3,labels=toupper(c(letters[1],letters[5],letters[10],letters[15])))))

但我希望它们根据Y轴上的内容而不是我给出的值进行更改。 有人可以帮我解决这个问题吗?

levelplot(volcano,main="levelplot(volcano)")

在此处输入图像描述

I'm working on on some details on my plots and I've found one I can't get around. On my levelplot are numeric tickmarks. Now I want my tickmarks on the y-axis to be changed to the corresponding Letters. (i.e. 1=A, 5=E,27=AA, 29=AC,...)

I've already used

scales=list(
    y=list(alternating=3,labels=toupper(c(letters[1],letters[5],letters[10],letters[15])))))

But I want them to change depending on what's on the Y-axis, not from values I'm giving.
Can anybody help me on this one?

levelplot(volcano,main="levelplot(volcano)")

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

七颜 2024-11-21 18:23:05

不是通用解决方案。使用pretty自行计算at

y_at <- pretty(seq_len(ncol(volcano)))
y_labels <- c(LETTERS, outer(LETTERS, LETTERS, paste, sep=""))
levelplot(
    volcano, main="levelplot(volcano)",
    scales=list(y=list(
        alternating=3,
        labels=y_labels[round(y_at)],
        at=y_at
    ))
)

改变 y 轴的格子水平图

Not general solution. Use pretty to compute at by self.

y_at <- pretty(seq_len(ncol(volcano)))
y_labels <- c(LETTERS, outer(LETTERS, LETTERS, paste, sep=""))
levelplot(
    volcano, main="levelplot(volcano)",
    scales=list(y=list(
        alternating=3,
        labels=y_labels[round(y_at)],
        at=y_at
    ))
)

Lattice levelplot with change y axis

等风来 2024-11-21 18:23:05

关于聊天的一些讨论表明 levelplot() 可以很好地处理热图情况(其中一个或两个变量是离散/分类的)。因此,我们只需要将数据转换为正确的格式即可。一种方法是至少将 y 坐标存储为具有适当级别设置的因子。

首先,沿着OP的数据模拟一些数据:

yholes <- c(LETTERS, sort(outer(LETTERS, LETTERS, paste, sep="")))[1:30]
xholes <- seq_along(yholes)
g <- expand.grid(X = xholes, Y = yholes)
set.seed(2)
dat <- with(g, data.frame(Y = factor(Y, levels = yholes), 
                          X = X, 
                          vals = runif(900)))

这给出了:

R> head(dat)
  Y X      vals
1 A 1 0.1848823
2 A 2 0.7023740
3 A 3 0.5733263
4 A 4 0.1680519
5 A 5 0.9438393
6 A 6 0.9434750

expand.grid() 调用的原因是 levelplot(),当通过我即将使用的公式方法需要每个数据点(在本例中为 900 个)有一个 Y 和一个 X

然后,可以通过 levelplot() 中的简单公式轻松生成该图:

require(lattice)
levelplot(vals ~ X + Y, data = dat)

生成以下内容:

Some discussion on chat indicates levelplot() handles the heatmap case (where one or both variables are discrete/categorical) just fine. Therefore, we just need to get the data into the correct format. One way to do that is to store at least the y coordinate as a factor with the appropriate levels set.

First, simulate some data along the lines of the OP's data:

yholes <- c(LETTERS, sort(outer(LETTERS, LETTERS, paste, sep="")))[1:30]
xholes <- seq_along(yholes)
g <- expand.grid(X = xholes, Y = yholes)
set.seed(2)
dat <- with(g, data.frame(Y = factor(Y, levels = yholes), 
                          X = X, 
                          vals = runif(900)))

which gives:

R> head(dat)
  Y X      vals
1 A 1 0.1848823
2 A 2 0.7023740
3 A 3 0.5733263
4 A 4 0.1680519
5 A 5 0.9438393
6 A 6 0.9434750

The reason for the expand.grid() call is that levelplot(), when used via the formula method, which I am about to make use of, needs a Y and a X for each data point (900 of them in this case).

The plot is then easy to produce via a simple formula in levelplot():

require(lattice)
levelplot(vals ~ X + Y, data = dat)

which produces this:

levelplot produced by the code

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文