使用 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
)
我有以下 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
)