You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含正负值的次坐标轴缩放匹配仅含正值的主坐标轴

问题

制作带趋势线的柱状图时,因percentage_increase存在正负值,缩放后折线的负值部分位于柱状图下方,希望折线整体处于柱状图上方。调整乘数后未达预期效果,现有数据及代码如下:

#Data
YEAR<- seq(2005,2024, by =1)
PIA <- c(294632872,318970713,295673727,308391873,308706714 ,323206154, 409271206,409217000,
         475475074,496270114,517171633  ,624824866 , 616674888 , 708032291 , 708184529 , 649368974,
         649368974,879366475,879744600,1084148245)
percentage_increase <- c(-9.38109456, 8.26039567, -7.30380096 , 4.30141228  ,0.10209121 , 4.69683338, 26.62853134,
                     -0.01324452 , 16.19142753  ,4.37352895,  4.21172229, 20.81576524, -1.30436198, 14.81451649,
                     0.02150156, -8.30511718 , 0.00000000, 35.41861564 , 0.04299971, 23.23443020)

Congreso_11 <- data.frame(YEAR,PIA,percentage_increase)

df_line <- data.frame(YEAR = Congreso_11$YEAR,
                      value =Congreso_11$percentage_increase*30500000)
#Graphic
ggplot(Congreso_11,aes(YEAR,PIA))+
  geom_col(width = 0.8)+
  geom_point(data =df_line, aes(x =AÑO,y =value),color = "blue", size = 4)+
  geom_line(data =df_line, aes(x =AÑO,y =value),color = "red", size = 2)
解决方案

要实现折线整体位于柱状图上方,需给折线的y值添加足够大的偏移量,确保所有折线上的点都高于柱状图的最高值,同时修正代码中的拼写错误:

修改后的代码

# Data
YEAR <- seq(2005,2024, by =1)
PIA <- c(294632872,318970713,295673727,308391873,308706714 ,323206154, 409271206,409217000,
         475475074,496270114,517171633  ,624824866 , 616674888 , 708032291 , 708184529 , 649368974,
         649368974,879366475,879744600,1084148245)
percentage_increase <- c(-9.38109456, 8.26039567, -7.30380096 , 4.30141228  ,0.10209121 , 4.69683338, 26.62853134,
                     -0.01324452 , 16.19142753  ,4.37352895,  4.21172229, 20.81576524, -1.30436198, 14.81451649,
                     0.02150156, -8.30511718 , 0.00000000, 35.41861564 , 0.04299971, 23.23443020)

Congreso_11 <- data.frame(YEAR,PIA,percentage_increase)

# 计算缩放后的百分比值,并添加偏移量使折线整体在柱状图上方
scale_factor <- 30500000
scaled_percent <- Congreso_11$percentage_increase * scale_factor
# 偏移量 = 柱状图最大值 - 缩放后百分比的最小值 + 缓冲值(避免折线紧贴柱子顶部)
offset <- max(Congreso_11$PIA) - min(scaled_percent) + 10000000

df_line <- data.frame(YEAR = Congreso_11$YEAR,
                      value = scaled_percent + offset)

# 绘制图形(修正AÑO为YEAR的拼写错误)
ggplot(Congreso_11,aes(YEAR,PIA))+
  geom_col(width = 0.8)+
  geom_point(data = df_line, aes(x = YEAR, y = value), color = "blue", size = 4)+
  geom_line(data = df_line, aes(x = YEAR, y = value), color = "red", size = 2)

关键说明

  1. 偏移量计算逻辑:通过max(Congreso_11$PIA)获取柱状图的最高值,减去缩放后百分比的最小值,再加上缓冲值,确保折线的最低点也高于柱状图的最高点,彻底解决负值部分落在柱子下方的问题。
  2. 修正拼写错误:原代码中AÑO是拼写错误,应改为YEAR,否则会因变量不存在导致报错。
  3. 灵活调整:若需调整折线与柱子的间距,可修改scale_factor(百分比缩放系数)或缓冲值的大小,适配不同的视觉需求。

内容的提问来源于stack exchange,提问作者Teco Jesús

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:35:10