【问题标题】:Grouped bar-plot/ Clustered column chart from a text file in R来自R中的文本文件的分组条形图/聚集柱形图
【发布时间】:2020-12-22 21:04:12
【问题描述】:

我打算从一个文本文件中为 12 个站的值绘制聚集柱形图。因此,该地块将分为 12 组。我在 excel 中很容易做到:

但是我在使用文本文件中的 ggplot2 时遇到了麻烦,这是我使用的代码:

library(ggplot2)
library(reshape2)

my_data <- read.table("MLD.txt",header = T)

attach(my_data)

my_data

head(my_data)

df <- melt(my_data, id.vars=1)


ggplot(df, aes(Station, value)) + geom_bar(
  aes(fill = variable),
  width = 0.4,
  position = position_dodge(width = 0.5),
  stat = "identity"
) +
  theme(
    legend.position = "top",
    legend.title =
      element_blank(),
    axis.title.x = element_blank(),
    axis.title.y = element_blank()
  ) 

这让我得到了这个数字:

如您所见,它不是将条形显示为组,而是描述值。如果有人可以建议我,我将不胜感激,我将如何生成类似于 excel 的图表。我在这里附上原始数据,虽然我更喜欢从文本或 csv 文件中绘制:

Station   MLD.IN  MLD.MOD
1        1  7.13333 10.52890
2        2  7.93404 10.52890
3        3  4.62014  8.75782
4        4  1.14347  9.06654
5        5  6.45909 10.52890
6        6  5.76597 10.52890
7        7  7.77065 10.05040
8        8  8.64324  7.20295
9        9  8.23878 10.52890
10      10  8.38739 10.48650
11      11 13.40270 10.52890
12      12 18.58280  8.97171

任何帮助、建议将不胜感激。

【问题讨论】:

  • 执行df$Station &lt;- factor(df$Station, levels=1:12, labels= paste0("Stn ", 1:12)) 然后重新生成图表。

标签: r csv ggplot2 text bar-chart


【解决方案1】:

如果您想要精确复制 Excel 图表,您可以执行以下操作:

library(ggplot2)
library(reshape2)

my_data <- read.table("MLD.txt",header = T)

df <- melt(my_data, id.vars = 1)

df$Station <- paste("Stn", df$Station)
df$Station <- factor(df$Station, levels = unique(df$Station))

ggplot(df, aes(Station, value, fill = variable)) + 
  geom_col(width = 0.4, position = position_dodge(width = 0.5)) +
  scale_y_continuous(limits = c(0, 20), breaks = 0:10 * 2) +
  scale_fill_manual(values = c("#599bd7", "#ed7d32")) +
  theme_bw() +
  ggtitle("Chart Title") +
  theme(
    legend.position = "bottom",
    legend.title = element_blank(),
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    panel.background = element_blank(),
    panel.border = element_blank(),
    axis.line = element_blank(),
    panel.grid.major.x = element_blank(),
    panel.grid.major.y = element_line(color = "gray50"),
    panel.grid.minor.y = element_blank(),
    plot.title = element_text(size = 24, hjust = 0.5)
  ) 

【讨论】:

  • 非常感谢,这次成功了。虽然我理解了你的大部分代码,但如果你能简单地解释一下这几行df$Station &lt;- paste("Stn", df$Station) df$Station &lt;- factor(df$Station, levels = unique(df$Station)),那就太好了
  • 当然@asheef_ik。您导入的文本具有 Station 的数字,R 将其解释为连续比例的数字。但是您需要将每个站点识别为一个离散的实体。在 R 中,我们可以通过使用paste 在每个数字前面粘贴字符串“Stn”来做到这一点。为了确保这些仍然按 stn 1 到 stn 12 排序,我们转换为一个因子,它允许我们指定排序。
  • 再次感谢您清楚地解释它。我对主题、标签和整体进行了一些调整,现在看起来已经不错了。
猜你喜欢
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多