【问题标题】:Plot data according to rownames with different symbols and values根据具有不同符号和值的行名绘制数据
【发布时间】:2019-09-22 18:02:33
【问题描述】:
a=c(1,2,3,10,30)
b=c(2.5,5,5.5,7,24)
c=c(0,0,5,0,32)

abc=cbind(a,b,c)
rownames(abc)=c("apple","orange","pears","watermelon","mango")

目标:

我想将这些数据绘制到同一个图中,其中:数据 (a) 为一条线,数据 (b) 为点符号,数据 (c) 为矩形符号,行名为 x-asix。

我遇到的问题:

  • 将所有内容绘制到具有不同特征的同一图中
  • 根据水果的名称绘制
  • 每个数据集中都有一个值 这是非常大(离群值),这使得情节非常宽和点 很小。

【问题讨论】:

    标签: r plot


    【解决方案1】:

    要使用经典图形,请使用matplot(在图形之后提供另一个经典图形替代项)并为类型和指示字符(NA == none,20 是点,15 是矩形)并省略 X 轴以允许以下 axis 语句指定行名称。最后添加一个图例。不使用任何包。 [剧情后续]

    matplot(abc, type = c("l", "p", "p"), pch = c(NA, 20, 15), xaxt = "n")
    axis(1, 1:nrow(abc), rownames(abc))
    legend("topleft", colnames(abc), lty = c(1, 0, 0), pch = c(NA, 20, 15), col = 1:3)
    

    这也可以,并且会给出相同的情节。

    plot(abc[, "a"], xlab = "", ylab = "abc", type = "l", xaxt = "n", 
      ylim = c(0, max(abc)))
    points(abc[, "b"], pch = 20, col = 2)
    points(abc[, "c"], pch = 15, col = 3)
    axis(1, 1:nrow(abc), rownames(abc))
    legend("topleft", colnames(abc), lty = c(1, 0, 0), pch = c(NA, 20, 15), col = 1:3)
    

    【讨论】:

    • 这完美!但是,我的实际数据实际上有超过 100 行,所以一切都聚集在一起;有什么建议吗? * a 是进口水果的数量,b 是美国人消费的水果数量,c 是亚洲消费的水果数量。我正在尝试比较 b 和 c,同时将 a 设置为 avg,
    • 如果您指的是刻度线处的水果,那么在axis 命令中,las=2 将旋转它们,cex.axis=0.5 将它们显示为一半大小。
    • 我认为主要的问题是值相对较大(即我的数据中大约 90% 低于 100,10% 高于 2000)。所以所有的小值都在底部打包在一起(超级不清楚),还有一些在图表的顶部。
    • Addomg log = "y"matplot 调用将以半对数比例绘制它。
    【解决方案2】:

    一个选项是matplot

    matplot(t(abc), type = 'l')
    legend("top", row.names(abc), col = seq_len(nrow(abc)), fill = seq_len(nrow(abc)))
    

    【讨论】:

      猜你喜欢
      • 2016-12-08
      • 1970-01-01
      • 2023-01-24
      • 2021-12-23
      • 2023-03-06
      • 2020-04-03
      • 2018-11-28
      • 2019-01-31
      • 1970-01-01
      相关资源
      最近更新 更多