有两个使用matplotlib创建的绘图示例(均来自matplotlib网页):
The first one(右)。The second one(错误)。
第二个边角(放大后)缺少一小块。线的终点是垂直线的中心,而不是更远的边。
然而,即使我使用的图片源代码是正确的网络:
import matplotlib.pyplot as plt
import numpy as np
x, y = np.random.randn(2, 100)
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax1.xcorr(x, y, usevlines=True, maxlags=50, normed=True, lw=2)
ax1.grid(True)
ax1.axhline(0, color='black', lw=2)
ax2 = fig.add_subplot(212, sharex=ax1)
ax2.acorr(x, usevlines=True, normed=True, maxlags=50, lw=2)
ax2.grid(True)
ax2.axhline(0, color='black', lw=2)
plt.show()
我得到了错误的结果。为什么会这样?我的matplotlib/python版本中有什么bug?还有别的吗?
我使用python 3.4.3和matplotlib 1.3.1。
提前谢谢。
最佳答案
这不是一个bug,而是由于用于轴脊椎的默认capstyle
。capstyle
定义了一条线的终止方式,以及两条线连接在一起时的外观。
您可以将capstyle
设置为butt
(默认)、round
或projecting
。可以通过为每个轴脊椎调用spines.set_capstyle
来更改此设置。
for spine in ax.spines.values():
spine.set_capstyle('projecting')
对于特定版本的matplotlib(1.3),当它们将修补程序对象的默认
capstyle
更改为butt
时,似乎无法设置spines
的capstyle,因为当前版本中有:对于面片,现在使用的capstyle是butt,以便与大多数其他对象的默认值保持一致,并避免在使用较大的线宽时出现非实线样式为实线的问题。以前,Patch使用capstyle'projection'。