geom_tile 找到合适的瓷砖高度
geom_tile finding the proper height of tiles
我正在用
绘制热图
ggplot(param, aes(V2, V1,z=V7))+ geom_tile(aes(fill = V7, height=0.02))
但是我的V1不是等间距的。我怎样才能找到合适的高度?因为 height=0.02 对于一些小值可能太大了,所以它们被其他覆盖了。
你能举个例子吗?例如。 V1 值如下:
1, 0.8,0.7,0.45,0.3, 0.12,0.07,0.0004
所以我需要找出每对值的差异。但是最小高度与最大高度不同。我读到瓷砖的高度 h 从 -h/2 到 h/2。但是最小高度当然是不同的,以避免差距!
答案(很大程度上)取决于您要表达的内容。如果有一些固有的高度(例如,该值应适用的范围),您应该使用它。也就是说,如果每个度量是一个小区域上的点度量,那就是应该使用的区域。
但是,如果您只想让条形相互接触,那可以做到,但必须在调用 ggplot
之外完成。 (另请注意:您的图表的解释可能有点偏差,因为较大的差距意味着某些措施比其他措施覆盖更广泛的区域,并且这些条不会以真实位置为中心。)
使用 dplyr
您可以简单地计算两个测量值之间的中点并将其用作点之间的边界。然后,使用 geom_rect
而不是 geom_tile
直接传入这些边界。请注意,由于您没有 post 任何数据:
,因此这假设了一些关于您的值范围的事情
sampleData <-
data.frame(
x = c(1,2,3)
, y = c(0.01, 0.1, 1)
, z = c(1,2,3)
)
sampleData %>%
mutate(ymin = (y + lag(y, default = 0))/2
, ymax = (y + lead(y, default = 1.5))/2
, xmin = x - 0.5
, xmax = x + 0.5
) %>%
ggplot(aes(xmin = xmin
, xmax = xmax
, ymin = ymin
, ymax = ymax
, fill = z)) +
geom_rect()
这是一个使用多个 x
位置的示例。请注意,在这里,我没有平均得到 ymin
和 ymax
,而是明确地将它们设置为我想要的边缘:
sampleData <-
data.frame(
x = rep(c(1,2,3), each = 3)
, y = c(0.01, 0.1, 1
, 0.04, 0.3, 0.9
, 0.2, 0.5, 0.8)
, z = c(1,2,3)
)
sampleData %>%
group_by(x) %>%
arrange(y) %>%
mutate(ymin = (y + lag(y))/2
, ymax = (y + lead(y))/2
, xmin = x - 0.5
, xmax = x + 0.5
, ymin = ifelse(is.na(ymin), 0, ymin)
, ymax = ifelse(is.na(ymax), 1.25, ymax)
) %>%
ggplot(aes(xmin = xmin
, xmax = xmax
, ymin = ymin
, ymax = ymax
, fill = z)) +
geom_rect()
谢谢!有效!但是在你最后一个例子中我不需要 default=0 和 lead 因为我得到了 NAs 吗?
它是否类似于 y 值的不相等的 sopaced x 值?
根据我的数据结构:
数据是按列排列的,每个 y 都有 x 值:
y x z
1 0.1#
1 0.2#
1 0.3#
1 0.4#
3 0.1
3 0.2
3 0.3
3 0.4
等等,例如
我正在用
绘制热图ggplot(param, aes(V2, V1,z=V7))+ geom_tile(aes(fill = V7, height=0.02))
但是我的V1不是等间距的。我怎样才能找到合适的高度?因为 height=0.02 对于一些小值可能太大了,所以它们被其他覆盖了。
你能举个例子吗?例如。 V1 值如下:
1, 0.8,0.7,0.45,0.3, 0.12,0.07,0.0004
所以我需要找出每对值的差异。但是最小高度与最大高度不同。我读到瓷砖的高度 h 从 -h/2 到 h/2。但是最小高度当然是不同的,以避免差距!
答案(很大程度上)取决于您要表达的内容。如果有一些固有的高度(例如,该值应适用的范围),您应该使用它。也就是说,如果每个度量是一个小区域上的点度量,那就是应该使用的区域。
但是,如果您只想让条形相互接触,那可以做到,但必须在调用 ggplot
之外完成。 (另请注意:您的图表的解释可能有点偏差,因为较大的差距意味着某些措施比其他措施覆盖更广泛的区域,并且这些条不会以真实位置为中心。)
使用 dplyr
您可以简单地计算两个测量值之间的中点并将其用作点之间的边界。然后,使用 geom_rect
而不是 geom_tile
直接传入这些边界。请注意,由于您没有 post 任何数据:
sampleData <-
data.frame(
x = c(1,2,3)
, y = c(0.01, 0.1, 1)
, z = c(1,2,3)
)
sampleData %>%
mutate(ymin = (y + lag(y, default = 0))/2
, ymax = (y + lead(y, default = 1.5))/2
, xmin = x - 0.5
, xmax = x + 0.5
) %>%
ggplot(aes(xmin = xmin
, xmax = xmax
, ymin = ymin
, ymax = ymax
, fill = z)) +
geom_rect()
这是一个使用多个 x
位置的示例。请注意,在这里,我没有平均得到 ymin
和 ymax
,而是明确地将它们设置为我想要的边缘:
sampleData <-
data.frame(
x = rep(c(1,2,3), each = 3)
, y = c(0.01, 0.1, 1
, 0.04, 0.3, 0.9
, 0.2, 0.5, 0.8)
, z = c(1,2,3)
)
sampleData %>%
group_by(x) %>%
arrange(y) %>%
mutate(ymin = (y + lag(y))/2
, ymax = (y + lead(y))/2
, xmin = x - 0.5
, xmax = x + 0.5
, ymin = ifelse(is.na(ymin), 0, ymin)
, ymax = ifelse(is.na(ymax), 1.25, ymax)
) %>%
ggplot(aes(xmin = xmin
, xmax = xmax
, ymin = ymin
, ymax = ymax
, fill = z)) +
geom_rect()
谢谢!有效!但是在你最后一个例子中我不需要 default=0 和 lead 因为我得到了 NAs 吗?
它是否类似于 y 值的不相等的 sopaced x 值?
根据我的数据结构:
数据是按列排列的,每个 y 都有 x 值:
y x z 1 0.1# 1 0.2# 1 0.3# 1 0.4# 3 0.1 3 0.2 3 0.3 3 0.4
等等,例如