【问题标题】:Heatmap-like plot for three categorical variables三个分类变量的类似热图的图
【发布时间】:2015-12-27 08:39:29
【问题描述】:

我正在处理案例形式的分类变量数据框,由三个变量(即颜色、形状和大小)及其相应的频率组成。数据框的一个例子是这样的:

 Color    Shape     Size   Freq
1 Yellow  Square    Big    10
2 Yellow  Square    Medium  6
3 Yellow  Square    Small   3
4 Yellow  Triangle  Big     4
5 Yellow  Triangle  Medium  6
6 Yellow  Triangle  Small   8
7 Red     Square    Big     2
8 Red     Square    Medium  6
9 Red     Square    Small   5
10Red     Triangle  Big    12
.......

“颜色”变量是根据“形状”和“大小”变量来衡量的,每种情况都有一个频率。

从这个数据框中,我正在努力创建一个类似热图的图,其中仅显示“颜色”和“形状”之间的关系,并使用频率最高的变量“大小”作为权重。有点棘手,不是吗!

例如,对于“黄色”-“方形”的情况,我应该只显示“大”,因为“大”是频率最高的尺寸。对于每个尺寸,都应该有一个伴随的颜色(即“红色”代表大号,“绿色”代表中号,“橙色”代表小号)。 弗兰克

【问题讨论】:

  • 你能给出 dput(你的数据框)的结果吗?另外,如果大小之间的频率存在联系,你想做什么?
  • dput 似乎太长,无法在此处显示,如果有帮助,我复制 str(df)。对于并列的情况,总是选择频率较高的。 str(df) data.frame: 750 obs. of 5 variables: $ Id : int 1 2 3 4 5 6 7 8 9 10 ... $ Constraint : Factor w/ 10 levels "Biz-demand","Capacity",..: 8 8 8 8 8 6 6 6 6 6 ... $ ValueRepository: Factor w/ 15 levels "Alliances","Brand",..: 11 11 11 11 11 11 11 11 11 11 ... $ Strength : Ord.factor w/ 5 levels "VS"<"S"<"W"<"VW"<..: 5 4 3 2 1 5 4 3 2 1 ... $ Freq : int 1 1 0 6 5 3 1 0 6 3 ...

标签: r plot heatmap


【解决方案1】:

这个怎么样?

library(dplyr)
library(ggplot2)

df_max <- df %>%
  group_by(Color, Shape) %>%
  slice(which.max(Freq))

head(df_max)
# Source: local data frame [4 x 4]
# Groups: Color, Shape [4]
# 
#    Color    Shape   Size  Freq
#    (chr)    (chr)  (chr) (int)
# 1    Red   Square Medium     6
# 2    Red Triangle    Big    12
# 3 Yellow   Square    Big    10
# 4 Yellow Triangle  Small     8

ggplot(df_max, aes(x = Color, y = Shape, fill = Size)) +
  geom_tile()

【讨论】:

  • 这非常接近我的需要!请让我再补充两个注意事项:(1)如何解决频率平局的情况(即总是首选更大的尺寸),以及(2)如何重新排列轴以反映尽可能分组的颜色(即那些强度“大”=红色,尽可能接近)。感谢您的大力帮助!弗兰克
  • @Frank 解决 #1 的最简单方法是在切片之前对 Sizes 进行排序(即,在 slice(which.max(Freq)) 之前添加 arrange(Size)。对于 #2,不清楚你在问什么,但我猜这可以通过重新排列和排序生成的数据框来解决。最好将这些问题作为一个单独的问题提出。
猜你喜欢
  • 2012-10-11
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
相关资源
最近更新 更多