<p>问题是没有给<code>plt.plot()</code>提供波长值,所以Matplotlib将索引作为默认值放入水平轴上的数组中。快速解决方案:</p>
<pre><code>plt.plot(l, B)
</code></pre>
<p>如果不显式设置记号标签,则可以得到:</p>
<p><a href="https://i.stack.imgur.com/cswsb.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/cswsb.png" alt="plot with proper values on x axis"/></a></p>
<p>当然,这个图中水平轴上的值实际上是以米为单位的,而不是纳米(尽管有标记),因为作为<code>plot()</code>(即数组<code>l</code>)的第一个参数传递的值是以米为单位的。这就是<code>xticks()</code>起作用的地方。双参数版本<a href="http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.xticks" rel="nofollow noreferrer">^{<cd5>}</a>将标签放在x轴上的相应位置。例如,<code>xticks([1], 'one')</code>将在x=1的位置放置标签“one”,如果该位置在绘图中。在</p>
<p>但是,它不会更改轴上显示的范围。在最初的示例中,对<code>xticks()</code>的调用在10<sup>-9</sup>这样的坐标处放置了一堆标签,但它没有改变轴的范围,它仍然是0到100。难怪所有的标签都挤到左边去了。在</p>
<p>您需要做的是调用<code>xticks()</code>,其中包含要放置标签的点和标签所需的文本。您这样做的方式,<code>xticks(l, labels)</code>,除了<code>l</code>的长度是101,而{<cd11>}只有长度6,所以它只使用<code>l</code>的前6个元素。你能做点什么吗</p>
^{pr2}$
<p>其中,<code>1e-9</code>的乘法将从纳米(您想要显示的内容)转换为米(Matplotlib实际在绘图中使用的坐标)。在</p>
<p><a href="https://i.stack.imgur.com/mu2zt.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/mu2zt.png" alt="fixed plot with proper labels"/></a></p>