【发布时间】:2015-11-25 21:21:13
【问题描述】:
我使用 matplotlib 绘制图像,X 轴上有像素 - 从 1 到 X 轴的图像大小,例如 [1,1000],它对应于我的物理值范围
k1_range = [2.11, 6.33]
我需要沿 X 轴显示标签,而不是像素,而是我的实际物理值。如果我会使用类似的东西
numpy.linspace(k1_range[0], k1_range[1], 5)
我会得到一些“丑陋”的标签
array([ 2.11 , 3.165, 4.22 , 5.275, 6.33 ])
我需要他们很好,就像
array([ 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5, 6. ])
在使用自动刻度绘制曲线时,matplotlib 可以生成如此漂亮的刻度,但我认为没有简单的方法可以为这个 nice-ticks-auto-generation 指定自定义范围。
我不得不使用这段代码来制作漂亮的滴答声,它似乎正在工作,但是编写错误代码来做一些已经在 matplotlib 中完成的事情是浪费时间
k1_range=[2.11, 6.33]
KTickCount = 5
KTickStep = numpy.abs((k1_range[1]-k1_range[0])) / KTickCount
Digits = numpy.floor(numpy.log10(KTickStep)+1)-1
KTickStep = (KTickStep/10**Digits)
if KTickStep < 2:
KTickStep = 1
elif KTickStep < 2.5:
KTickStep = 2
elif KTickStep < 5:
KTickStep = 2.5
else:
KTickStep = 5
KTickStep = KTickStep * 10**Digits
Digits = numpy.floor(numpy.log10(numpy.max(k1_range))+1)-1
KTicks = numpy.arange(numpy.ceil(k1_range[0]/KTickStep)*KTickStep, k1_range[1], KTickStep)
print(KTicks)
输出:
[ 2.5 3. 3.5 4. 4.5 5. 5.5 6. ]
在使用 matplotlib 绘图时如何获得好的(四舍五入到 1、2、2.5、5)刻度位置?
【问题讨论】:
标签: python matplotlib