绘制离散数据

时间:2018-03-01 13:32:06

标签: r

嗨伙计们, 我只需要一个关于如何以适当的方式绘制一些数据的建议 可能是不言自明的。 我有一个计数矩阵,如下所示:

             Condition1       Condition2     Condition3    ...... 

Patient1        30                 4            23         ......
Patient2        22                 1            2          ......
Patient3        23                 56           13         ......
Patient4        4                  3            29         ......
Patient5        12                 6            1          ......
Patient6        98                 5            0          ......
........       ....               ...          ...         ......

这是一份患者在所列条件下患有不良事件的次数的表格。患者总数:50。总条件:8。 我试图绘制热图,但我认为这不是绘制这种类型数据的正确方法,因为它们具有离散性。

你能帮帮我,请给我一些指示吗?

提前谢谢

3 个答案:

答案 0 :(得分:2)

虽然你说你不想要热图,但我这样做是因为我觉得它是一个很好的解决方案。

library(plotly)

df <- data.frame(
  PATIENT = c('Patient1', 'Patient2', 'Patient3', 'Patient4', 'Patient5', 'Patient6'),
  COND_1 = c(30, 22, 23, 4, 12, 98),
  COND_2 = c(4, 1, 56, 3, 6, 5),
  COND_3 = c(23, 2, 13, 29, 1, 0),
  stringsAsFactors = F
)

p <- plot_ly(
  x = colnames(df[,-1]),
  y = df$PATIENT[nrow(df):1],    # reversing the order of the rows
  z = as.matrix(df[nrow(df):1,-1]),
  type = "heatmap"
) %>%
  layout(
    xaxis = list(side = "top")
  )
p

enter image description here

有许多选项可以在plotly(颜色,轴,左边距)中自定义此选项。如果您需要任何帮助,可以问一下。

答案 1 :(得分:1)

除了热图之外,你也许可以用这种方式显示数据 -

library(ggplot2)
df_long = df %>% gather()

ggplot() +
  geom_segment(aes(x = df_long$key[df_long$key != "Condition8"],
                   y = df_long$value[df_long$key != "Condition8"],
                   xend = df_long$key[df_long$key != "Condition1"],
                   yend = df_long$value[df_long$key != "Condition1"]), 
               lwd = 1) +
  geom_vline(aes(xintercept = 1:8), alpha = 0.5, lwd = 2)

enter image description here 其中每一行代表患者/行。但不确定如何找到50名患者

答案 2 :(得分:1)

可以完成许多不同的事情 - 取决于你想要展示的内容。此page列出了几个示例以及代码。以下是我尝试过的一些有趣的内容:

  1. 热图是个不错的选择(我个人更喜欢使用ggplot::geom_tile()并将scale_fill_gradient()设置为高对比度颜色)。示例here
  2. Lineplot(由@erocoar建议)适用于小数据样本,对于50名患者来说,它非常麻烦。
  3. 你可以证明在另一种情况发生时另外一种情况影响患者的可能性(例如,条件2导致条件3,4和5的可能性等)
  4. 您可以为每位患者绘制实例并为每种情况使用facet(使用facet_grid()) - 优先于在同一绘图中显示多行。示例here
  5. 累积的hisogram
  6. 边缘直方图(显示侧面连通状态的分布?) - 如果在不同条件下探索关系,则非常有用。
  7. 动画气泡图 - 为每位患者绘制实例并循环播放动画中的条件(使用gganimate
  8. 重叠密度图(将透明度alpha设置为合理的值以查看所有不同的条件)。虽然除非你能够/想要以某种方式对它们进行分组,否则对于8种情况可能会有点困难。
  9. 分面热图(类似于日历热图,但不是周/月,而是您的patiend Id)。第一个链接有一个很好的例子。
  10. 绘制不同条件的实例(更多用于探索关于条件是否/如何链接的不同假设)
  11. 我还建议对每位患者的值进行标准化,以确保您的情节不会超出规模。

    我还没有包含任何简洁的代码,因为第一个链接几乎涵盖了所有这些示例。我通常更喜欢使用ggplot,但如果您愿意,可以使用plotly使您的情节互动。

    最后,如果您正在尝试探索您的数据(或提供某些工具来探索您的数据),编写不同的图表等可能会很麻烦,重复这样做时,您可能需要查看创建{{1 app。