如何将含正负值的次坐标轴缩放匹配仅含正值的主坐标轴
问题
制作带趋势线的柱状图时,因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)
关键说明
- 偏移量计算逻辑:通过
max(Congreso_11$PIA)获取柱状图的最高值,减去缩放后百分比的最小值,再加上缓冲值,确保折线的最低点也高于柱状图的最高点,彻底解决负值部分落在柱子下方的问题。 - 修正拼写错误:原代码中
AÑO是拼写错误,应改为YEAR,否则会因变量不存在导致报错。 - 灵活调整:若需调整折线与柱子的间距,可修改
scale_factor(百分比缩放系数)或缓冲值的大小,适配不同的视觉需求。
内容的提问来源于stack exchange,提问作者Teco Jesús
相关产品推荐
相关产品推荐

