ggplot绘图y轴数值异常排查及合适可视化方案咨询
问题:年龄与工资关系可视化异常及优化方案
需求说明
我想要绘制数据集中个体的工资(变量tpens)与年龄(变量eta)的关系,设置x轴为年龄,y轴为工资。
数据集样本
> head(final2, 20) nquest nord sex anasc ireg eta staciv studio tpens PPA pens_real anno_lav retrib 1 173 1 1 1948 18 64 3 5 2500 89.3 27.995521 1971 0 2 375 1 2 1925 16 87 4 2 409 89.3 4.580067 1960 1 3 629 1 1 1939 5 73 4 3 1188 107.2 11.082090 1954 1 4 632 1 1 1950 5 62 1 3 1320 107.2 12.313433 1972 0 5 633 1 2 1934 5 78 4 2 350 107.2 3.264925 1952 1 6 1238 1 1 1937 15 75 4 3 1000 89.3 11.198208 1977 0 7 7886 1 1 1950 9 62 1 5 2000 106.7 18.744142 1973 0 8 11972 2 1 1938 17 74 1 2 750 89.3 8.398656 1962 1 9 20174 1 1 1941 8 71 1 5 2000 107.2 18.656716 1962 1 10 20174 2 2 1942 8 70 1 3 132 107.2 1.231343 1957 1 11 20223 1 2 1938 3 74 1 5 800 109.6 7.299270 1956 1 12 20223 2 1 1939 3 73 1 4 980 109.6 8.941606 1952 1 13 20711 2 1 1944 4 68 1 2 1900 107.2 17.723881 1958 1 14 20837 1 1 1931 8 81 1 4 1600 107.2 14.925373 1949 1 15 20837 2 2 1928 8 84 1 2 430 107.2 4.011194 1944 1 16 21461 1 2 1918 5 94 4 2 600 107.2 5.597015 1929 1 17 22173 1 1 1938 15 74 1 2 1200 89.3 13.437850 1953 1 18 22208 1 2 1935 5 77 4 2 700 107.2 6.529851 1950 1 19 22222 1 1 1927 5 85 4 2 1100 107.2 10.261194 1941 1 20 22276 1 1 1949 8 63 2 5 1170 107.2 10.914179 1968 0
tpens统计值(筛选retrib == 1)
> summary(subset(final2$tpens, final$retrib == 1)) Min. 1st Qu. Median Mean 3rd Qu. Max. 109 650 970 1028 1276 4700
问题描述
我运行了以下代码绘制年龄与工资的关系:
final2 %>% filter( retrib == 1 ) %>% ggplot() + geom_col( aes( x = eta, y = tpens), fill = "red", alpha = 0.5 )+ theme_classic()+ scale_x_continuous(breaks = seq(30,120, by=1))
但生成的图表中y轴出现了200000、150000等远超tpens最大值4700的数值,请问该异常的原因是什么?我是否使用了错误的绘图类型?有没有更合适的可视化方式?
优化更新
经调整后,改用箱线图按年龄分组展示,效果更好,实现代码如下:
final %>% mutate(group = case_when( (eta <= 50) ~ "<50", (eta>50 & eta<=60) ~ "50~70", (eta>60 & eta<=70) ~ "60~70", (eta>70 & eta<=80) ~ "70~80", (eta>80) ~ " >80")) %>% ggplot(aes( x = as.factor(group), y = tpens )) + geom_boxplot(fill="slateblue", alpha=0.2) + theme_classic()
为了对箱线图的分组进行自定义排序,使用以下代码:
final %>% mutate(group = case_when( (eta <= 50) ~ "<50", (eta>50 & eta<=60) ~ "50~70", (eta>60 & eta<=70) ~ "60~70", (eta>70 & eta<=80) ~ "70~80", (eta>80) ~ " >80")) %>% ggplot(aes( x = factor(group, levels=c("<50", "50~70", "60~70", "70~80", " >80")), y = tpens ))+ geom_boxplot(fill="slateblue", alpha=0.2) + theme_classic()
内容的提问来源于stack exchange,提问作者io_boh
相关产品推荐
相关产品推荐

