【问题标题】:How do I get both my columns into a Bar Graph?如何将我的两列都放入条形图?
【发布时间】:2017-01-12 21:27:09
【问题描述】:

我打印了一个矩阵,我有两列我希望进入一个条形图,但我不知道如何。当我尝试它时,它使用整个矩阵作为 X 值。这是我的代码

smoke <- matrix(c(53,42,40,40,39,34,34,30,28,24,22,21,20,16,'A','A','A','B','A','A','A','A','B','A','C','B','B', 'B'),nrow=14, ncol = 2)
colnames(smoke) <- c("NumberofBooks","Grade")
smoke <- as.table(smoke)
smoke

任何帮助绘制数字对字母的帮助将不胜感激!

【问题讨论】:

  • 您希望如何构建条形图? A、B、C沿x轴,y轴为平均图书数?
  • 你能提供一个你想创建的情节的例子吗? (以 Excel 为例)
  • 是条形图,X轴为字母等级,Y轴为图书数量。
  • 制作一个由数字和字符串组成的矩阵将强制所有字符。把它变成一个表格会让事情变得更糟,因为这不是表格在 R 中所做的。特别是如果你想按照标签的建议使用 ggplot,你需要将数据放在 data.frame 中,你可以像 smoke &lt;- data.frame(NumberOfBooks = c(53,42,40,40,39,34,34,30,28,24,22,21,20,16), Grade = c('A','A','A','B','A','A','A','A','B','A','C','B','B', 'B')) 一样制作。目前还不清楚您希望如何从那里构建图表,但这至少是起点。

标签: r matrix plot graph ggplot2


【解决方案1】:
smoke <- 

matrix(c(53,42,40,40,39,34,34,30,28,24,22,21,20,16,'A','A','A','B','A','A','A','A','B','A','C','B','B', 'B'),nrow=14, ncol = 2)
colnames(smoke) <- c("NumberofBooks","Grade")
smoke <- as.data.frame(smoke)

p <- ggplot(data = smoke, aes(y = NumberofBooks, x = Grade))
p <- (p
      + geom_bar(stat = 'Identity', position = 'dodge', color = 'white')
      )

print(p)

不完全确定您在寻找什么,但这可以帮助您入门。您需要更改为 data.frame 才能使用 ggplot

【讨论】:

  • @AlexCabo 很高兴它有帮助。请确保将问题标记为已解决,并对那些有帮助的问题投赞成票。一切顺利。
  • 我在color = 'white' 上面的代码中添加了一个额外的部分,这将有助于区分你的行。
  • 可以,你能简单解释一下你在“p”之后做了什么吗?我真的不知道 aes 是什么(或者 geom_bar )。
  • 当然。 aes 是情节的美学,所以你在那里定义你的 x 和 y。 geom_bar 是绘图类型(在您的情况下,条形图还有其他几种,我会查看在线文档@docs.ggplot2.org/current 以获取有关其他类型的更多帮助)。 position = 'dodge' 分离出所有数据,否则你会得到一个堆积条形图,颜色将有助于隔离线条。你可以用 ggplot 做很多事情,但希望这会让你开始你想去的地方。
  • 非常感谢!
【解决方案2】:

在我看来,将这些值放入条形图中的最简单方法就是用数据框替换矩阵。就像这里:

number_of_books <- c(53,42,40,40,39,34,34,30,28,24,22,21,20,16)
grade <- c('A','A','A','B','A','A','A','A','B','A','C','B','B', 'B')
smoke <- data.frame(number_of_books,grade)

bar_graph <- ggplot(smoke, aes(number_of_books,grade)) + geom_bar(stat="identity")

希望对你有帮助。

【讨论】:

  • 我认为你的 x 和 y 美学倒退了。
  • @AlexCabo 如果没有,您可能必须安装该软件包。使用install.packages("ggplot2") 回答者可能假设您这样做是因为此问题上的ggplot 标记
  • @YangLi 我以为我已经安装了ggplot2,我猜它没有工作。
  • @AlexCabo 仔细检查您是否已使用 library(ggplot2) 加载它
  • @YangLi 是的,我做到了。现在似乎可以工作了,但它没有打印出图表。
【解决方案3】:

这是否符合您的要求?

library(dplyr)
library(ggplot2)

# install.packages("dplyr"); install.packages("ggplot2")

smoke <- matrix(c(53,42,40,40,39,34,34,30,28,24,22,21,20,16,'A','A','A','B','A','A','A','    A','B','A','C','B','B', 'B'),nrow=14, ncol = 2)
colnames(smoke) <- c("NumberofBooks","Grade")

smoke %>% 
  as.data.frame() %>% 
  group_by(Grade) %>% 
  summarise(NumberofBooks = mean(as.numeric(NumberofBooks))) %>% 
  ggplot(aes(x = Grade, y = NumberofBooks)) +
  geom_bar(stat = "identity") +
  xlab("Grade") +
  ylab("Average Number of Books") +
  ggtitle("Average number of book by Grade")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2023-03-24
    • 2019-09-01
    • 2021-11-13
    相关资源
    最近更新 更多