【问题标题】:Graphing a Multi-Series Bar/Dot Plot with R用 R 绘制多系列条形图/点图
【发布时间】:2016-02-02 00:15:06
【问题描述】:

所以我无法为我拥有的这个数据集创建点图/条形图。我的数据集看起来像this。我想要一个看起来像this 的输出。但是,通过 ggplot 的 geom_bar() 只会给我计数,不会从表中获取单个十进制值。我也尝试过使用 Plotly,但它似乎不能很好地扩展到有多个玩家的情节。

我已经设置了一个包含 200 多个变量的更大数据框。我正在尝试制作可以在该数据框中搜索特定玩家的东西,然后从中创建一个情节。因此,我理想地寻找可以轻松处理 5-10 个不同系列的东西。

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: r plot plotly


    【解决方案1】:

    这很简单,关键是将数据从当前的宽格式转换为更适合在 R 中绘图的长格式。并使用geom_point 而不是geom_bar

    首先,一些可重复的示例数据(如果您在此处发布另一个问题,您应该在您的问题中再次使用这些数据,以便其他人更容易帮助您):

    library(ggplot2)
    library(reshape2)
    
    dataset <- data.frame(
      PlayerName = letters[1:6], 
      IsolationPossG = runif(6), 
      HandoffPossG = runif(6), 
      OffScreenPossG = runif(6)
    )
    

    这是您当前的数据,采用宽格式:

     dataset
      PlayerName IsolationPossG HandoffPossG OffScreenPossG
    1          a     0.78184751  0.939183520     0.74461784
    2          b     0.06557433  0.745699149     0.96540299
    3          c     0.21105745  0.753534811     0.02977973
    4          d     0.41271918  0.555475622     0.18317886
    5          e     0.38153149  0.246292074     0.74862310
    6          f     0.89946318  0.008412111     0.53195933
    

    现在我们转换为长格式:

    molten <- melt(
      dataset, 
      id.vars = "PlayerName", 
      measure.vars = c("IsolationPossG", "HandoffPossG", "OffScreenPossG")
    )
    

    这是长格式,对于在 R 中绘图更有用:

    head(molten)
      PlayerName       variable      value
    1          a IsolationPossG 0.78184751
    2          b IsolationPossG 0.06557433
    3          c IsolationPossG 0.21105745
    4          d IsolationPossG 0.41271918
    5          e IsolationPossG 0.38153149
    6          f IsolationPossG 0.89946318
    

    绘制方法如下:

    ggplot(molten, aes(x = variable, y = value, colour = PlayerName)) +
      geom_point(size = 4) +
      theme_bw() +
      theme(legend.position="bottom",legend.direction="horizontal")
    

    这给出了:

    h/thow to have multple labels in ggplot2 for bubble plot

    如果您希望数据点的形状因名称而异,如您的示例图像所示(但在两个情节的美学上使用玩家名称变量似乎有点过分):

    ggplot(molten, aes(x = variable, y = value, shape = PlayerName, colour = PlayerName)) +
      geom_point(size = 4) +
      theme_bw() +
      theme(legend.position="bottom",legend.direction="horizontal")
    

    【讨论】:

    • 非常感谢,这是完美的!将每一行转换为唯一值的想法闪过我的脑海,但我没有意识到使用像 melt() 这样的东西会多么容易。另外,在评论 StackoverFlow 时,您是如何格式化数据框的?我尝试使用 Markdown,但没有成功。
    • 不客气,从宽到长的转换是为分析和绘图准备许多数据集的基本部分,因此了解它是一项有用的技能。要格式化我的答案中的数据框,我选择了文本并使用代码格式化按钮,有关更多详细信息,请参见此处:meta.stackexchange.com/a/22189/181565
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2022-07-07
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多