【问题标题】:Marker size not respected in scatter output to PDF w/ matplotlib在使用 matplotlib 的 PDF 的散点输出中不考虑标记大小
【发布时间】:2020-12-16 16:47:24
【问题描述】:

似乎 pylab scatter 的标记大小在导出为 PDF 时具有不同的行为?请注意,在图像中,左下角的 X 很大(来自 PDF 的屏幕截图)。在 png 输出和屏幕显示()中看起来不错。但是,根据附加的代码,它们应该匹配。这对 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 输出:

【问题讨论】:

    标签: python matplotlib pdf pdf-generation


    【解决方案1】:

    您的s 的长度与xy 的长度不同。

    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
    

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

    【讨论】:

    • 呃,谢谢。但是,是的,在 v 3.1.1 中,出于某种原因,这并没有给我带来错误,这就是我没有注意到的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2022-01-02
    • 2011-09-24
    相关资源
    最近更新 更多