R语言基于CSV数据绘制带对数刻度直方图问题求助
R绘制指定列的对数轴直方图解决方案
问题核心原因
- 原代码只传入了
Count列作为绘图数据,R默认使用序列索引作为x轴数值,不会匹配你的Value列 - 未手动指定y轴范围,导致y轴显示和参考图不一致
修复后完整代码
# 读入本地csv数据(如果不用样例数据可以取消注释下面一行) # k <- read.csv("dir/k.csv") # 你提供的样例数据 k <- structure(list(Value = 1:101, Count = c(8512998L, 2524797L, 408468L, 141472L, 72906L, 43135L, 29530L, 21288L, 16890L, 13181L, 10935L, 8941L, 7883L, 6677L, 5995L, 5259L, 4802L, 4124L, 3912L, 3411L, 3228L, 2761L, 2690L, 2335L, 2200L, 1878L, 1792L, 1586L, 1520L, 1219L, 1232L, 1087L, 1027L, 895L, 845L, 761L, 781L, 712L, 676L, 614L, 578L, 506L, 476L, 452L, 438L, 394L, 373L, 345L, 325L, 348L, 320L, 257L, 260L, 219L, 227L, 213L, 177L, 182L, 170L, 151L, 135L, 127L, 118L, 116L, 123L, 96L, 115L, 69L, 72L, 78L, 70L, 63L, 60L, 64L, 67L, 50L, 63L, 64L, 63L, 49L, 53L, 45L, 48L, 48L, 40L, 56L, 28L, 44L, 40L, 32L, 22L, 18L, 30L, 18L, 23L, 15L, 27L, 22L, 22L, 21L, 10L)), class = "data.frame", row.names = c(NA, -101L)) # 核心绘图代码 plot( x = k$Value, y = k$Count, log = "y", type = 'h', lwd = 10, lend = 2, xlab = "Value", ylab = "Count", ylim = c(10, 1e7) # 可根据参考图的y轴上下限调整数值 ) # 可选:自定义y轴刻度标签,和参考图完全对齐 # axis(side = 2, at = c(10, 100, 1000, 10000, 100000, 1000000, 10000000), labels = c("10", "100", "1k", "10k", "100k", "1M", "10M"))
调整说明
- 显式指定
x = k$Value后,x轴就会完全对应你数据里的Value列数值 - 修改
ylim参数的两个数值,分别对应y轴的最小值和最大值,即可快速对齐参考图的y轴显示范围 - 若需要自定义y轴的刻度显示格式,取消上面
axis代码的注释,修改at和labels参数的数值即可
内容的提问来源于stack exchange,提问作者Nikos
相关产品推荐
相关产品推荐

