lby060988 2022-08-13 12:41 采纳率: 33.3%
浏览 140
已结题

R语言绘制河流图报错处理

我想用R语言绘制河流图

element_text设置字体 scale_x_continuous更换横轴标签 labs(fill="") 无标签图例

p<-ggplot(dataframe,aes(x = CPP_phase,y = genus,fill=Name)) + theme_bw() +
theme(panel.grid.major=element_line(colour=NA),
panel.background = element_rect(fill = "transparent",colour = NA),
plot.background = element_rect(fill = "transparent",colour = NA),
panel.grid.minor = element_blank(),
text=element_text(family="A",size = 9))+
scale_x_continuous(breaks =dataframe$CPP_phase,labels=rep(c('pre','acq','ext','rein'),times=10))+labs(fill="")
p

这是我的代码
以下是报错内容

scale_x_continuous(breaks =dataframe$CPP_phase,labels=rep(c('pre','acq','ext','rein'),times=10))+labs(fill="")
Error in +.gg:
! Cannot add ggproto objects together. Did you forget to add this object to a ggplot object?
Run rlang::last_error() to see where the error occurred.
rlang::last_error()
Error in $<-.data.frame(*tmp*, "call_text", value = c("\033[38;5;232m\033[1\m033[94mggplot2:::+.gg(\033[38;5;232\033[22\033[39mscale_x_continuous(breaks = dataframe$CPP_phase, labels = rep(c("pre", "acq", "ext"\033[38;5;232033[1033[94)033[38;5;232033[22\033[39", :
替换数据里有2行,但数据有1

我试了很多次,不知道问题出在了哪里。

  • 写回答

3条回答 默认 最新

  • 倪桦 2022-08-15 13:17
    关注

    我了解了下你的这个代码,看需求应该是替换掉原本的x轴标签,你用的这个“scale_x_continuous”方法报错提示应替换标签数目与绘制的x轴标签刻度数不匹配的。

    对于标签替换,我提供下我的处理思路:

    img


    这是我用于绘图的数据data.plot,数据表有4列,以下是这四列的属性:

    > str(data.plot)
    'data.frame':    38 obs. of  4 variables:
     $ phaselabel : Factor w/ 43 levels "phase_1977","phase_1978",..: 1 1 1 1 2 2 2 2 3 3 ...
     $ time_series: int  1 1 1 1 2 2 2 2 3 3 ...
     $ sample     : chr  "Action" "Adventure" "Comedy" "Drama" ...
     $ value      : num  2.984 0.209 0.516 2.54 1.915 ...
    

    其中,第一列phaselabel 是用于更改的x轴标签,属性为字符串;第二列time_series是用于绘制geom_stream()x轴提供的时间序列,是一个数值型序列;第三列sample 是样本;第四列是每个时间点上每个样本的值,属性为数值型序列。
    这是绘图函数:

    ggplot(data.plot,aes(x = time_series,y = value,fill=sample)) + geom_stream() +
        scale_x_continuous(breaks = seq(1,max(data.plot$time_series)),labels = unique(data.plot$phaselabel))  #调整x轴的刻度标签,按一个单位分隔开来,每个单位的刻度替换为unique(data.plot$phaselabel)中的标签
    

    出图结果

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月27日
  • 已采纳回答 8月19日
  • 创建了问题 8月13日

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同