如何绘制和导出具有平滑边缘的多色线
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/…中的答案(不是接受的答案)解决了以上是关于如何绘制和导出具有平滑边缘的多色线的主要内容,如果未能解决你的问题,请参考以下文章