我有一個二維數組,我想從中使用matplotlib生成一個輪廓圖。一切工作正常保存爲PNG(或其他光柵格式),但包括在一張紙我需要保存到postscript格式的數字。
問題是,當我保存到postscript時,我得到的文件相當大(有些MB)。它看起來像Matplotlib保存矢量格式的一切。雖然這對於軸和標籤是有意義的,但是如果光柵化會降級,我希望以柵格格式(我知道可以嵌入到postscript中)繪製輪廓。 有人知道該怎麼做嗎?我正在使用Agg後端。Matplotlib輪廓圖爲postscript
3
A
回答
1
OK,最後我找到了答案,以我自己的問題。它需要在matplotlib郵件列表中進行一次困難的挖掘,所以我將here the relevant thread鏈接起來,希望它對別人也有幫助,並且可能更容易找到(順便說一句,沒有人回覆發送消息的可憐的人)。
我會在這裏總結一下這個想法。必須使用set_rasterized
方法,如sega_sai suggested。然而,正如我在我的評論中解釋的,不是將該方法應用於整個圖形,而是必須將該方法應用於構成等高線圖的線條。訣竅是首先爲它們創建一個「容器」並對其進行光柵化處理,而不是柵格化每條單獨的行(這是我已經嘗試過的並給出不好的結果)。這工作正常。在討論我鏈接你可以找到它的代碼。
+3
如果您可以提供MWE(最小工作示例),那麼對於希望在未來解決您的問題的任何人來說,這個答案將會提高10倍! – Hooked
4
4
這是一個最小的工作示例。我現在使用的代碼從sega_sai一段時間沒有任何問題。
from matplotlib.collections import Collection
from matplotlib.artist import allow_rasterization
import matplotlib.pyplot as plt
class ListCollection(Collection):
def __init__(self, collections, **kwargs):
Collection.__init__(self, **kwargs)
self.set_collections(collections)
def set_collections(self, collections):
self._collections = collections
def get_collections(self):
return self._collections
@allow_rasterization
def draw(self, renderer):
for _c in self._collections:
_c.draw(renderer)
def insert_rasterized_contour_plot(c):
collections = c.collections
for _c in collections:
_c.remove()
cc = ListCollection(collections, rasterized=True)
ax = plt.gca()
ax.add_artist(cc)
return cc
if __name__ == '__main__':
import numpy as np
x, y = np.meshgrid(*(np.linspace(-1,1,500),)*2)
z = np.sin(20*x**2)*np.cos(30*y)
c = plt.contourf(x,y,z,30)
plt.savefig('fig_normal.pdf')
insert_rasterized_contour_plot(c)
plt.savefig('fig_rasterized.pdf')
在我的電腦這導致:
fig_normal.pdf:文件大小爲5810千字節&需求〜5秒,在Adobe Reader中呈現
fig_rasterized.pdf:文件大小是60千字節&呈現直接在Adobe Reader
2
相關問題
- 1. Matplotlib輪廓圖標籤
- 2. 當輪廓不存在時,Matplotlib輪廓圖失敗
- 3. 如何設置爲默認matplotlib輪廓圖總是標記輪廓
- 4. Matplotlib - 具有單個值的輪廓圖
- 5. 覆蓋Matplotlib中的輪廓圖
- 6. matplotlib輪廓圖與lognorm - colorbar級別
- 7. matplotlib輪廓圖插值z值
- 8. matplotlib繪製橢圓輪廓
- 9. 動畫與輪廓matplotlib
- 10. Matplotlib輪廓Clabel位置
- 11. python matplotlib plot3d輪廓長度
- 12. 繪製輪廓點 - Matplotlib/Python
- 13. Matplotlib輪廓不起作用
- 14. 用matplotlib創建的輪廓使用opencv計算輪廓區域
- 15. matplotlib中的輪廓標籤填充輪廓錯誤?
- 16. matplotlib中的輪廓不會繪製輪廓的指定數量
- 17. 爲餅圖繪製輪廓
- 18. Matplotlib中輪廓下方的網格線
- 19. matplotlib在3D中輪廓標籤
- 20. 如何從Matplotlib格式化輪廓線
- 21. 用matplotlib指定輪廓的RGB顏色
- 22. 帶有空白區域的Matplotlib輪廓
- 23. Matplotlib輪廓:無效的GridData指數
- 24. 獲取輪廓的每個級別 - Matplotlib
- 25. 使用pcolormesh和輪廓的Matplotlib動畫
- 26. 如何用matplotlib正確創建輪廓?
- 27. matplotlib - 從輪廓線提取值
- 28. matplotlib - 從輪廓線中提取數據
- 29. 更新matplotlib動畫的輪廓
- 30. matplotlib輪廓輸入數組順序
你能給我們一個提示或看看你的代碼? – khan