【发布时间】:2026-01-17 21:40:02
【问题描述】:
Arr1、Arr2、Arr3、Arr4 在 0-1 范围内,长度约为 50000。
长度为 10 的简短示例:
| Array | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| Arr1 | 0.1 | 0.1 | 0.1 | 0.2 | 0.2 | 0.2 | 0.7 | 0.7 | 0.4 | 0.7 |
| Arr2 | 0.6 | 0.6 | 0.6 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.5 | 0.1 |
| Arr3 | 0.3 | 0.3 | 0.3 | 0.7 | 0.7 | 0.7 | 0.2 | 0.2 | 0.1 | 0.2 |
| Arr4 | 0.4 | 0.6 | 0.7 | 0.2 | 0.1 | 0.3 | 0.4 | 0.5 | 0.3 | 0.9 |
| B | a | a | a | b | b | b | a | a | a | b |
如何根据水平图中的值(或灰度值,每个值是不同的灰色阴影)从浅到深绘制每个 Arr1、Arr2、Arr3、Arr4。
接近 0 的值会使颜色变浅,接近 1 的值会变暗。使用灰度时,0 为白色,1 为黑色。
在图片Arr1中:低值是浅黄色,高值是深黄色(所有值都在0到1之间)
最后一个栏不同,Array: B 是a 和b 的列表,我如何为a 和b 的每次出现绘制不同的颜色。
在 B 的图片中:a 的出现将被着色为 green,b 的出现将被着色为pink。
我不会太担心外框的布局,我会使用ggarrange 将所有图形放在一个图中
我为Array B尝试了什么
B=c(rep("a",1000),rep("b",1000),rep("a",1000))
df=data.frame(B)
df$ID <- seq.int(nrow(df))
df$char=as.numeric(factor(B))
ggplot(df, aes(x=ID,y = char, color = cut(char, breaks = c(0, 1, 2))))+geom_col()+coord_cartesian(ylim=c(0,1))+
scale_colour_manual(values = c('red','green'),limits=c('(0,1]', '(1,2]'))+
guides(color = guide_legend(title = 'letter'))
数组B 很重要,我无法获得正确或正确的 x 轴比例
melt(id.vars = "Array") %>%
mutate(variable = str_extract(variable, "[0-9]+")) %>%
mutate(value = case_when(
value == "a" ~ -1,
value == "b" ~ 2,
TRUE ~ as.numeric(value)
)) %>%
mutate(zz = 1) %>%
ggplot(aes(x = Array, y = variable, group = Array, fill = value)) +
geom_col() + coord_flip()
我猜variable 设置不正确
【问题讨论】: