R ggplot2-使用一列打印Y轴,但从另一列标记

R ggplot2-使用一列打印Y轴,但从另一列标记,r,ggplot2,R,Ggplot2,我正在创建一个跨越多个区域/时间的物种丰富度气泡图。我需要Y轴从顶部按物种分类学顺序排列,因此有一个单独的整数列“Number”,我使用它创建绘图以保持正确的顺序。但我必须用“物种”列替换Y轴标签 我可能忽略了一些简单的事情,但我已经尝试了好几件事情,但都没有成功 我无法使用物种列绘制图的原因是,总共有100多个物种,而R将顺序改为字母数字,这更糟糕。我也试着用这种方法来修复它 我已经尝试在导入时保存顺序,scale\u y\u discrete函数(见下文)和其他地方提出的几种解决方案。Str

我正在创建一个跨越多个区域/时间的物种丰富度气泡图。我需要Y轴从顶部按物种分类学顺序排列,因此有一个单独的整数列“Number”,我使用它创建绘图以保持正确的顺序。但我必须用“物种”列替换Y轴标签

我可能忽略了一些简单的事情,但我已经尝试了好几件事情,但都没有成功

我无法使用物种列绘制图的原因是,总共有100多个物种,而R将顺序改为字母数字,这更糟糕。我也试着用这种方法来修复它

我已经尝试在导入时保存顺序,
scale\u y\u discrete
函数(见下文)和其他地方提出的几种解决方案。Str_order和我遇到的一个或两个其他推荐命令都不再可用

欢迎您提供任何建议

  ggplot(data, aes(x=Sample, y=Number)) +
geom_point(aes(size=ifelse(Value==0, NA, Value), alpha = 0.75)) +
scale_size(range = c(0, 5)) +
scale_y_discrete(limits=c(data$Species)
提前谢谢


假设您仍然感兴趣,并使用
df
作为数据帧,您可以使用:

sSpeciesLevels <- c("5. Mallard (67)", 
                    "4. Northern shoveler (62)", 
                    "3. Garganey (60)",
                    "2. Egyptian goose (55)",
                    "1. Grey francolin (60)")
            
 ggplot(df, aes(x = Sample, 
                y = factor(Species, 
                           levels = sSpeciesLevels))) +
     geom_point(aes(size = ifelse(Value == 0, NA, Value)), alpha = 0.75) +
     scale_size(range = c(0, 5))

sSpeciesLevels尝试类似于
scale\u y\u discrete(labels=Species)
?最好在您的问题中添加一个标记,因为这将使其他人更容易帮助您。您可以使用dput(数据)要共享样本数据,您能否将物种转化为一个因子,然后将其用于Axisy,以指导如何将可复制数据放入问题中?请看一看?特别是“生成最小数据集”和“复制数据”部分。想想最低限度:少就是多!你好谢谢,我试过了,但没能成功。无论如何,我试图避免键入/格式化并粘贴所有名称(我的完整数据集有140个物种)。我认为有一种更简单的方法可以通过特定的列来定义顺序。
sSpeciesLevels <- c("5. Mallard (67)", 
                    "4. Northern shoveler (62)", 
                    "3. Garganey (60)",
                    "2. Egyptian goose (55)",
                    "1. Grey francolin (60)")
            
 ggplot(df, aes(x = Sample, 
                y = factor(Species, 
                           levels = sSpeciesLevels))) +
     geom_point(aes(size = ifelse(Value == 0, NA, Value)), alpha = 0.75) +
     scale_size(range = c(0, 5))