[英]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 轴上的波动率是百分比。 它们都具有数据类型“字符”。
我的第一个问题是当我运行代码时会出现气泡图,但 x 轴不是数字顺序,y 轴是数字顺序。
我尝试使用代码 df$Profitpc <- as.numeric(df$Profitpc) 但这会导致列中的所有值都变为 go NA,并带有警告“强制引入的 NA”。
有没有一种方法可以对 x 轴进行排序,使其按数字顺序(递增)?
我的第二个问题是两个轴的缩放都没有适当地缩放。 理想情况下,我希望两个轴都具有适当的缩放比例,例如 0 到最大 % 值。 有没有办法做到这一点? 如果这很明显,我很抱歉。 我附上了图表的图片来说明这些问题。
您向我们提供了您的代码,但没有提供您的数据,因此这不是一个简单的独立示例或代表。 [有关如何向我们提供帮助您所需的更多建议,请参阅此帖子。]
但是,根据您描述的症状,我猜测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 %")
仍然不能保证顺序正确,因此我还将变量转换为数值变量。 您可以像这样使用阅读器 package 中的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
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.