【问题标题】:R - Ggplot dataframe do not sort data properlyR - Ggplot 数据框不能正确排序数据
【发布时间】:2022-01-13 11:13:36
【问题描述】:

我正在尝试绘制来自 dataset 的数据

我用过这个功能:

wine_red <- read.csv2("winequality-red.csv")
ggplot(wine_red, aes(x=quality, y=alcohol)) + 
    scale_fill_continuous(type = "viridis") +
    geom_bin2d(binwidth=1)

但是这样做我得到了一个未正确排序的 y 轴:它从 10 -> 19 然后 7 -> 9

如何按正确的数字顺序对其进行排序?

【问题讨论】:

  • 如果你的 y 值不是数字,就会发生这种情况,它完全按照字符应该做的排序。因此,请确保您的 y 值是数字。
  • 好的,怎么做?我用w_red[,a]&lt;-as.numeric(w_red[,a]) 尝试了一个循环,但是转换得到了错误的值(0.4 变成了 5,0.56 变成了 57)
  • 请直接说明你的例子。您在 ggplot 中提供wine_red 作为数据,然后在您的美学中使用data,现在提到w_red 作为您的数据?
  • 我添加了获取数据的行(并更正了第二行)
  • 您需要在 read.csv 中设置分隔符和抽取器,read.csv 和 read.csv2 之间的区别应该基于语言/区域设置,其中首先使用逗号作为分隔符,点作为抽取器,而另一个使用半列作为分隔符,逗号作为抽取器。您的数据是混合的......所以无论如何使用 read.csv 您有正确的分隔符,但错误的抽取器。因此它将您的值视为字符串而不是数字。长话短说,我建议始终只使用 read.csv 并设置您的偏好:read.csv(file, sep = ";", dec = ".") 会起作用。

标签: r dataframe plot


【解决方案1】:

您的代码运行良好,就像 data 您需要使用 winequality_red 以及 x=winequality_red$qualityy=winequality_red$alcohol。下面还有一个示例如何转换您的数据,以分隔列。

winequality_red <- read_delim("HERE SPECIFY YOUR DATA LOCATION", 
  ";", escape_double = FALSE, trim_ws = TRUE)

ggplot(winequality_red , aes(x=winequality_red$quality, y=winequality_red$alcohol)) + 
  scale_fill_continuous(type = "viridis") +
  geom_bin2d(binwidth=1)

【讨论】:

  • read_delim 抛出括号错误
  • @Foxhunt 完全符合您的需要,例如“C:/Users/Downloads/winequality-red.csv”。因此,您需要指定数据的位置,然后是其余部分,+“;”,escape_double = FALSE,trim_ws = TRUE)
  • 对不起,我错过了一行,那是 + ";" 至极抛出错误。我删除了它,它运行良好。谢谢
【解决方案2】:

这样的?

library(tidyverse)

df <- winequality_red
df %>% 
  select(quality, alcohol) %>% 
  ggplot(aes(x = quality, y=alcohol))+
  scale_fill_continuous(type = "viridis")+
  geom_bin2d(binwidth = 1)

【讨论】:

  • 我试过你的代码,结果和之前一样
  • 我们是否使用相同的数据框:winequality_red
  • 是的,质量从 3 到 8,酒精从 8.4 到 14.9。我之前只做过read.csv2
  • 改用这个read.csv(file, sep = ";", dec = ".")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多