de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 astromax
astromax
Question

Matplotlib Plot Kehilangan Transparansi Saat Menyimpan .ps/.eps

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: png

Jika aku memilih untuk menyimpannya sebagai .ps/.eps berikut adalah apa yang tampak seperti: ps

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?

41 2013-10-28T15:27:29+00:00 7
 Jakob
Jakob
Pertanyaan edit 28 Oktober 2013 в 10:13
Pemrograman
image
png
matplotlib
ps
Solution / Answer
Francesco Montesano
Francesco Montesano
28 Oktober 2013 в 5:41
2013-10-28T17:41:18+00:00
Lebih
Sumber
Sunting
#22644061

Masalahnya adalah bahwa eps tidak mendukung transparansi native.

Ada beberapa pilihan:

  1. 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)

  2. '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):

  1. Hanya menggambar elips perbatasan di atas hexbins.
  2. Dapatkan centre dan amplitudo dari masing-masing segi enam, (mungkin membuang semua nol sampah) dan membuat scatter plot menggunakan warna yang sama dalam hexbin dan menyesuaikan penanda ukuran dan bentuk seperti yang anda inginkan. Anda mungkin ingin untuk redraw elips perbatasan di atas itu
 Community
Community
Jawaban edit 23 Mei 2017 в 11:47
25
0
 P.R.
P.R.
11 Maret 2014 в 11:13
2014-03-11T23:13:40+00:00
Lebih
Sumber
Sunting
#22644063

Alternatif lain akan menyimpannya ke pdf

savefig('myfigure.pdf')

Yang bekerja dengan pdflatex, jika itu adalah alasan mengapa anda harus menggunakan eps dan svg.

14
0
 Poshpaws
Poshpaws
8 Mei 2014 в 11:47
2014-05-08T11:47:45+00:00
Lebih
Sumber
Sunting
#22644064

Aku 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.

8
0
 Molly
Molly
28 Oktober 2013 в 4:38
2013-10-28T16:38:36+00:00
Lebih
Sumber
Sunting
#22644060

Anda dapat rasterize angka sebelum menyimpannya untuk menjaga transparansi dalam file eps:

ax.set_rasterized(True)
plt.savefig('rasterized_fig.eps')
7
0
 Hugo
Hugo
19 Februari 2016 в 12:51
2016-02-19T00:51:41+00:00
Lebih
Sumber
Sunting
#22644066

Aku memecahkan ini dengan:

  1. menambahkan set_rasterization_zorder(1) ketika menentukan angka area:
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)
  1. zorder=0 di setiap alpha=anynumber di plot:
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.

 kuadrat
kuadrat
Jawaban edit 30 Agustus 2018 в 6:22
2
0
Luis DG
Luis DG
23 November 2016 в 7:49
2016-11-23T19:49:44+00:00
Lebih
Sumber
Sunting
#22644067

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

Luis DG
Luis DG
Jawaban edit 24 November 2016 в 12:33
1
0
 B.Kocis
B.Kocis
10 September 2015 в 9:26
2015-09-10T09:26:14+00:00
Lebih
Sumber
Sunting
#22644065

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.

0
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 1 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi