r - ggplot2:将长字符串(只有 2 个单词以不同方式重复)可视化为条形图

标签 r string ggplot2 bar-chart

我有一个由两类单词组成的 whatsapp 对话:

bla bla bla bla
 <indig>fu fu</indig>
 <indig>fu fu</indig>
 bla bla bla bla bla bla.. bla bla bla bla bla
 <indig>fu</indig>?
 <indig>fu fu</indig>?
 bla bla bla bla bla bla bla bla bla bla bla bla
 bla
 <indig>fu fu</indig>
 bla bla <indig>fu</indig>
 bla <indig>fu</indig>
 bla.. bla
 bla bla bla bla bla bla ??
 bla bla bla
 bla bla bla bla bla bla bla
 bla bla bla bla bla bla bla bla bla
 bla bla <indig>fu</indig> bla🤣🤣🤣

我想将 blafu 可视化为使用 2 种颜色的条形图,以便我可以看到 fu 颜色出现在哪里( start, middle, end...) 以及 bla 颜色占多数的位置。到目前为止,我只有一个示例,没有要显示的代码: enter image description here 这里黑色可能与 fu 相关联,白色可能与 bla 相关联。有什么想法可以在 ggplot2 中绘制类似的东西吗?

最佳答案

我认为这基本上分为两部分 - 格式化数据和绘制绘图。

格式化数据

# Make one string
input_string <- paste(input_string, collapse = " ")

# delete everything <inside> angle brackets
input_string <- gsub("<.*?>", "", input_string)

# Split on spaces
input_string <- strsplit(input_string, "\\s")  |>
    unlist()

# delete all non-alpha e.g. "fu?" becomes "fu"
input_string <- gsub("[^[:alpha:]]", "", input_string)

words_to_plot <- c("fu", "bla")

binary_vector_to_plot <- input_string[input_string %in% words_to_plot]

plot_df <- data.frame(
    x = seq_along(binary_vector_to_plot),
    y = binary_vector_to_plot
)

head(plot_df)
#   x   y
# 1 1 bla
# 2 2 bla
# 3 3 bla
# 4 4 bla
# 5 5  fu
# 6 6  fu

绘制情节

library(ggplot2)
ggplot(plot_df) +
    geom_vline(
        aes(
            xintercept = x,
            color = y
        )
    ) +
    theme_bw() +
    scale_color_manual(
        values = c("white", "black")
    ) +
    ggtitle("Barcode plot") +
    theme(
        legend.key = element_rect(fill = "grey"),
        legend.title = element_blank(),
        axis.title.x = element_blank(),
        axis.text.x = element_blank()
    )

enter image description here

输入数据

input_string <- c(
    "bla bla bla bla",
    "<indig>fu fu</indig>",
    "<indig>fu fu</indig>",
    "bla bla bla bla bla bla.. bla bla bla bla bla",
    "<indig>fu</indig>?",
    "<indig>fu fu</indig>?",
    "bla bla bla bla bla bla bla bla bla bla bla bla",
    "bla",
    "<indig>fu fu</indig>",
    "bla bla <indig>fu</indig>",
    "bla <indig>fu</indig>",
    "bla.. bla",
    "bla bla bla bla bla bla ??",
    "bla bla bla",
    "bla bla bla bla bla bla bla",
    "bla bla bla bla bla bla bla bla bla",
    "bla bla <indig>fu</indig> bla<U+0001F923><U+0001F923><U+0001F923>"
)

关于r - ggplot2:将长字符串(只有 2 个单词以不同方式重复)可视化为条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73959159/

相关文章:

regex - R:基于模式列出文件

r - 动态侧边栏菜单 R Shiny

c# - 巨大的字符串到 WinForm RichTextBox

r - 按箱划分的密度图的颜色段

r - 如何在R中连续调整图例?

c - 将字符串地址作为参数传递给指向 Char 函数的指针的指针

javascript - 从字符串中删除所有非小写字符

r - 将标签放在负和正 geom_bar 上

r - Rstudio 使用 igraph 的网络错误消息

r - 聚合数据并排除一列中的重复项