【问题标题】:How to plot Row.names on x axis with x and y columns on y axis?如何在 x 轴上绘制 Row.names,在 y 轴上绘制 x 和 y 列?
【发布时间】:2017-07-26 03:22:44
【问题描述】:

我有 3 列,Row.namesxy

如何在 x 轴上绘制 Row.names,在 y 轴上绘制 xy,以比较 xy 的线条?

    Row.names                      x           y
1   bare_nuclei                   NA          NA
2   bland_chromatin         5.979253    2.100437
3   clump_thickness         7.195021    2.956332
4   marginal_adhesion       5.547718    1.364629
5   mitoses                 2.589212    1.063319
6   normal_nucleoli         5.863071    1.290393
7   single_eipthelial       5.298755    2.120087
8   uniformity_cell_shape   6.560166    1.443231
9   uniformity_cell_size    6.572614    1.325328

【问题讨论】:

  • 您打算通过为xy 绘制一条线来显示什么?绘制一条线意味着一种趋势,据我所知,这些是对不同变量的离散观察,这意味着用折线图显示数据是错误的。
  • @Mako212 也许是比较每个 Row.name 的 x 和 y 值的直方图?我只想比较每个 Row.name 的 x 和 y 的值

标签: r plot


【解决方案1】:

让我们使用ggplot2:

R/ggplot2 需要具有“长”格式的数据(意味着每行一个观察值)来创建多种类型的图表。

我们使用melt 进行转换,使用Row.names 作为id.varsmelt(data,id.vars="Row.names")。然后我们将行名称分配给 x 轴,将 melt 生成的列(称为 value)分配给 y 值。最后,我们使用 geom_bar 为您的 x 和 y 值着色,并使用 position="dodge" 将它们分成单独的条。

require(ggplot2)
require(reshape2)

df1 <- melt(data,"Row.names")

g1 <- ggplot(df1, aes(x = Row.names, y=value)) +
  geom_bar(aes(fill=variable),stat="identity", position ="dodge") + 
  theme_bw()+ 
  theme(axis.text.x = element_text(angle=-40, hjust=.1))

【讨论】:

  • 可能是因为我只能使用 R 的 3.1.1,但运行它时出现错误。我可以加载包,但是在运行 ggplot 代码时,出现错误:“不知道如何为函数类型的对象自动选择比例。默认为连续。eval(expr,envir,enclos)中的错误:object'未找到变量”
  • “不知道如何为函数类型的对象自动选择比例。默认为连续。eval(expr,envir,enclos)中的错误:找不到对象'变量'”
  • @JoeJohnson df1 的列名是什么(融化的数据)?
  • 我如何找到它?当我执行 View(df1) 时,我收到一个错误“View 中的错误:无法将类型 'closure' 强制转换为 'character' 类型的向量”
  • 别管那个错误,df1的列名是:Row.names, variable, and value