使用 R 的气泡图 - x 轴变量不按数字顺序 + 轴缩放

Bubble Chart using R - x axis variables are not in numerical order + Scaling of axis

我有以下 R 代码,其中包含一些虚拟数据。我正在尝试创建一个气泡图,其中气泡的大小取决于数量,并根据 x 轴上的盈利能力(占数量的百分比)和波动率(占数量的百分比)定位在 y 轴上。代码如下:

 rio_csv <- import("~/Desktop/R/Dummy Data.csv") 

# Select columns to go into df

df <- data.frame("Volpc" = rio_csv[,6],"Profitpc"= rio_csv[,5],"Amount"= rio_csv[,4])

#Plot Bubble Chart

plot <- ggplot(df, aes(x = Profitpc, y = Volpc, size = Amount)) + 
geom_point(alpha = 0.2) + scale_size(range = c(5,15)) + xlab("Profitability %") + 
ylab("Volatility %")

plot

x 轴上的盈利能力度量是一个百分比,y 轴上的波动率是一个百分比。它们的数据类型都是 'character'.

我的第一个问题是当我 运行 代码出现一个气泡图但是 x 轴不是数字顺序,y 轴是数字顺序。

我尝试使用代码 df$Profitpc <- as.numeric(df$Profitpc) 但这会导致列中的所有值变为 NA 并出现警告 'NAs introduced by coercion'。

有没有办法对 x 轴进行排序,使其按数字顺序(递增)?

我的第二个问题是两个轴的缩放比例不合适。理想情况下,我希望两个轴都有适当的缩放比例,例如 0 到最大百分比值。有没有办法做到这一点?如果这很明显,我很抱歉。我附上了图表的图片来说明问题。

您给了我们您的代码,但没有提供您的数据,因此这不是一个简单的独立示例或 reprex。 [有关如何向我们提供我们需要帮助您的更多建议,请参阅 this post。]

但是,根据您描述的症状,我猜测 df$Profitpc 包含诸如 27.0% 之类的值。这就是 as.numeric() 失败的原因:它不知道如何处理 %。所以您的解决方案是重新格式化您的输入数据,以便 df$Profitpc 真正是一个数字。然后图形将按照您的意愿运行。由于您尚未向我们提供您的输入数据,因此您只能靠自己来完成...

就我个人而言,我也会对 df$Volpc 进行相同的更改。正如您所发现的,以您想要的顺序呈现数据只是运气。一旦您获得了数字数据(以及您想要的显示顺序),您就可以使用 ggplot 的功能来按照您想要的方式格式化它的外观。

这里的教训是,将数据的推导与其表示分开很重要。

我支持@Limey。您仍然可以尝试检查 Profitpc 是否是一个因素,如果是,则将其转换为 character ,如下所示:

ggplot(df, aes(x = as.character(Profitpc), y = (Volpc), size = Amount)) + 
  geom_point(alpha = 0.2) + scale_size(range = c(5,15)) + xlab("Profitability %") + 
  ylab("Volatility %") 

仍然不能保证顺序是正确的,因此我也会将变量转换为数值变量。您可以像这样使用 readr 包中的 parse_number()

ggplot(df, aes(x = parse_number(Profitpc), y = parse_number(Volpc), size = Amount)) + 
  geom_point(alpha = 0.2) + scale_size(range = c(5,15)) + xlab("Profitability %") + 
  ylab("Volatility %") 

数据

df <- tibble::tribble(
        ~Profitpc,   ~Volpc, ~Amount,
            "10%",    "30%",     10L,
         "15.50%",    "20%",     15L,
            "81.40%", "80.30%",      6L,
         "50%",  "30.3&",     12L
        )