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。 我试图绘制热图,但我认为这不是绘制这种类型数据的正确方法,因为它们具有离散性。
你能帮帮我,请给我一些指示吗?
提前谢谢
答案 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
有许多选项可以在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)
答案 2 :(得分:1)
可以完成许多不同的事情 - 取决于你想要展示的内容。此page列出了几个示例以及代码。以下是我尝试过的一些有趣的内容:
ggplot::geom_tile()
并将scale_fill_gradient()
设置为高对比度颜色)。示例here。 facet_grid()
) - 优先于在同一绘图中显示多行。示例here。 gganimate
)alpha
设置为合理的值以查看所有不同的条件)。虽然除非你能够/想要以某种方式对它们进行分组,否则对于8种情况可能会有点困难。 我还建议对每位患者的值进行标准化,以确保您的情节不会超出规模。
我还没有包含任何简洁的代码,因为第一个链接几乎涵盖了所有这些示例。我通常更喜欢使用ggplot
,但如果您愿意,可以使用plotly
使您的情节互动。
最后,如果您正在尝试探索您的数据(或提供某些工具来探索您的数据),编写不同的图表等可能会很麻烦,重复这样做时,您可能需要查看创建{{1 app。