如何绘制和导出具有平滑边缘的多色线

Posted

技术标签:

【中文标题】如何绘制和导出具有平滑边缘的多色线【英文标题】:How to plot and export multi-colored line with smooth edges 【发布时间】:2018-04-23 14:05:28 【问题描述】:

我尝试用多种颜色绘制一条线,为此我遵循this 示例。

导出的 pdf 结果在行的开头和结尾都有断点,而我希望结果是一条没有断点的平滑线。 LineCollection 以一种颜色绘制每一行,但我也可以平滑地改变颜色。

我尝试为每一行添加round ends,但它不会影响导出的 pdf 结果(而 plt.show() 绘图看起来更好,并且带有圆形边缘)。

参考代码:

lc = mcoll.LineCollection(segments, array=z, cmap='copper', linewidth=3)
ax.add_collection(lc)
plt.savefig("_l.pdf".format(filenamebase))

【问题讨论】:

您可以使用更多点,使曲线看起来更平滑。在最简单的情况下,点数可以翻倍,如this answer。 【参考方案1】:

当我使用 svg 格式然后用 inkscape 转换绘图时,问题就消失了。虽然最初的问题仍然存在,并且显然 savefig for pdf 有问题,但是 svg->pdf 技巧避免了这个问题并使线条的边缘变圆。

下面的脚本实现了这个技巧(并且还生成了 pdf + tex 文件以便于嵌入到文章中)。

def export_plot(filenamebase, export_area_drawing = True, export_latex = True):

  plt.savefig("_l.pdf".format(filenamebase))

  if export_latex:
    ead = ''
    if export_area_drawing:
      ead = '--export-area-drawing'

    el = '--export-latex'
    plt.savefig(".svg".format(filenamebase))
    cmd = ''' env -u LD_LIBRARY_PATH inkscape -T -f 0.svg \
              --export-background-opacity=0 \
              1 2 --export-pdf=0.pdf'''.format(filenamebase, ead, el)
    os.system(cmd)
    os.system('rm .svg'.format(filenamebase))

【讨论】:

谢谢,遇到了同样的问题,但我在 Windows 上使用了 cairosvg 库。请注意,我仍然有一个问题,通过***.com/questions/33812902/…中的答案(不是接受的答案)解决了

以上是关于如何绘制和导出具有平滑边缘的多色线的主要内容,如果未能解决你的问题,请参考以下文章

RoundRect 的圆角边缘不平滑

如何使用 glDrawElements() 绘制硬面立方体? [复制]

Matplotlib:绘制具有非透明边缘的透明直方图

如何使用边缘保留的梯度扩散平滑滤波器模糊图像

如何有效地渲染具有多边形边缘的网格表面?

如何制作边缘平滑的 CSS 三角形?