I'm mengalami masalah dengan mencoba untuk menyimpan beberapa plot dengan transparan ellipsoids pada mereka jika saya mencoba untuk menyelamatkan mereka dengan .ps/.eps ekstensi.
Berikut ini's plot disimpan sebagai .png:
Jika aku memilih untuk menyimpannya sebagai .ps/.eps berikut adalah apa yang tampak seperti:
Bagaimana saya mendapatkan sekitar ini, adalah untuk menggunakan ImageMagick untuk mengkonversi asli png ke ps. Satu-satunya masalah adalah bahwa gambar dalam format png adalah sekitar 90k, dan itu menjadi hanya di bawah 4M setelah konversi. Ini tidak baik karena saya memiliki banyak gambar-gambar ini, dan itu akan mengambil terlalu banyak waktu untuk mengkompilasi saya dokumen latex. Apakah ada yang punya solusi untuk hal ini?
Masalahnya adalah bahwa eps
tidak mendukung transparansi native.
Ada beberapa pilihan:
rasterize gambar dan cantumkan dalam file eps (seperti @Molly menunjukkan) atau mengekspor ke pdf dan mengkonversi dengan beberapa alat eksternal (seperti gs) (yang biasanya bergantung juga pada rasterization)
'meniru' transparansi, memberikan warna yang terlihat seperti transparan pada latar belakang.
Saya membahas ini untuk yakin sekali pada matplotlib mailing list, dan saya punya saran untuk rasterize, yang tidak layak seperti yang anda dapatkan baik pixellized atau tokoh besar. Dan mereka don't skala sangat baik ketika dimasukkan ke dalam, misalnya, sebuah publikasi.
Saya pribadi menggunakan pendekatan kedua, dan meskipun tidak ideal, saya menemukan itu cukup baik. Saya menulis kecil python script yang mengimplementasikan algoritma dari ini JADI post untuk memperoleh solid RGB representasi dari warna dengan memberikan transparansi
EDIT
Dalam kasus tertentu plot anda mencoba untuk menggunakan zorder
kata kunci untuk memesan bagian-bagian yang diplot. Cobalah untuk menggunakan zorder=10
untuk biru elips, zorder=11
untuk hijau dan zorder=12
untuk hexbins.
Cara ini biru harus di bawah segala sesuatu, kemudian hijau elips dan akhirnya hexbins. Dan plot harus dibaca juga dengan warna solid. Dan jika anda suka nuansa warna biru dan hijau yang anda miliki dalam png, anda dapat mencoba untuk bermain dengan mimic_alpha.py
.
EDIT 2
Jika anda 100% yakin bahwa anda memiliki untuk menggunakan eps, ada beberapa penyelesaian yang datang ke pikiran saya (dan yang pasti lebih jelek dari anda plot):
hexbin
dan menyesuaikan penanda ukuran dan bentuk seperti yang anda inginkan. Anda mungkin ingin untuk redraw elips perbatasan di atas ituAku punya masalah yang sama. Untuk menghindari rasterizing, anda bisa menyimpan gambar sebagai pdf dan kemudian jalankan (pada unixish sistem setidaknya) di terminal:
pdftops -eps saya.pdf saya.eps
Yang memberikan .eps file sebagai output.
Aku memecahkan ini dengan:
fxsize=16
fysize=8
f = figure(num=None, figsize=(fxsize, fysize), dpi=180, facecolor='w',
edgecolor='k')
plt.subplots_adjust(
left = (18/25.4)/fxsize,
bottom = (13/25.4)/fysize,
right = 1 - (8/25.4)/fxsize,
top = 1 - (8/25.4)/fysize)
subplots_adjust(hspace=0,wspace=0.1)
#f.suptitle('An overall title', size=20)
gs0 = gridspec.GridSpec(1, 2)
gs11 = gridspec.GridSpecFromSubplotSpec(1, 1, subplot_spec=gs0[0])
ax110 = plt.Subplot(f, gs11[0,0])
f.add_subplot(ax110)
ax110.set_rasterization_zorder(1)
ax110.scatter(xs1,ys1 , marker='o', color='gray' , s=1.5,zorder=0,alpha=0.3)#, label=label_bg)
dan 3) akhirnya raster=True ketika menyimpan:
P.savefig(str(PLOTFILENAME)+'.eps', rasterized=True)
Catatan bahwa ini mungkin tidak bekerja seperti yang diharapkan dengan transparan
kata kunci savefig
karena RGBA warna dengan alpha<1 pada latar belakang transparan akan diberikan sama seperti RGB warna dengan alpha=1.
Seperti disebutkan di atas, yang terbaik dan termudah pilihan (jika anda tidak ingin kehilangan resolusi) adalah untuk raster gambar
f = plt.figure()
f.set_rasterized(True)
ax = f.add_subplot(111)
ax.set_rasterized(True)
f.savefig('figure_name.eps',rasterized=True,dpi=300)
Dengan cara ini, anda dapat mengatur ukuran dpi pilihan juga. Bahkan, anda juga dapat bermain dengan zorder di bawah ini yang anda inginkan untuk menerapkan rasterization:
ax.set_rasterization_zorder(0)
Catatan: Hal ini penting untuk menjaga f.set_rasterized(True) ketika anda menggunakan plt.subplot dan plt.subplot2grid fungsi. Jika tidak, label dan centang daerah tidak akan muncul di .eps file
Solusi saya adalah untuk ekspor plot sebagai .eps, beban itu dengan Inkscape misalnya, kemudian Ungroup plot, pilih objek yang ingin saya mengatur transparansi dan hanya mengedit Opacity Isi "Fill dan Stroke" tab.
Anda bisa menyimpan file seperti .svg jika anda ingin men-tweak itu nanti, atau mengekspor gambar untuk publikasi.