在带有 matplotlib 的 PDF 散点输出中不考虑标记大小

Marker size not respected in scatter output to PDF w/ matplotlib

似乎 pylab 散点图的标记大小在导出为 PDF 时有不同的行为?请注意,在图像中,左下角的 X 很大(PDF 的屏幕截图)。在 png 输出和屏幕 show() 中看起来不错。不过,根据附加的代码,它们应该匹配。 PDF 输出有问题吗?

import numpy as np
import pylab as plt

x=np.arange(1,10)
y=np.arange(1,10)
s=np.arange(1,100,10)

fig, ax = plt.subplots(figsize=(5, 5))

ax.scatter(x,y, marker='x', color='gray',s=s)
plt.savefig('test.png')
plt.savefig('test.pdf')
plt.show()   

PDF 输出:

PNG 输出:

您的 sxy 的长度不同。

len(s) # 10
len(x) # 9
len(y) # 9

为什么这会导致这种行为,不知道。但是如果你设置 s 为相同的长度,可能会像这样:

s = np.arange(1,100,11)

应该可以。

因此,完整代码:

import numpy as np
import pylab as plt

x = np.arange(1, 10)
y = np.arange(1, 10)
s = np.arange(1, 100, 11)

fig, ax = plt.subplots(figsize = (5, 5))

ax.scatter(x, y, marker = 'x', color = 'gray', s = s)
plt.savefig('test.png')
plt.savefig('test.pdf')
plt.show()   

将给予:

PNG:

PDF:


我不知道您当前使用的是哪个版本,但最新版本 (3.3.3) 会在 运行 您的原始代码:

时给出 ValueError
ValueError: s must be a scalar, or the same size as x and y

这基本上描述了我的答案。