我使用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可以生成如此美观的刻度,但我认为没有简单的方法可以为这个漂亮的刻度自动生成指定自定义范围。
我不得不使用这段代码来制作好的滴答声,它似乎正在工作,但现在浪费时间来编写错误的代码来做一些已经在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)刻度位置?
答案 0 :(得分:0)
matplotlib github上有人给我回答这个问题,这个问题很好用https://github.com/matplotlib/matplotlib/issues/6975#issuecomment-242579370
import matplotlib
import matplotlib.ticker
...
l = matplotlib.ticker.AutoLocator()
l.create_dummy_axis()
l.tick_values(-10, 15.5)
array([-10., -5., 0., 5., 10., 15., 20.])