rth*_*rth 8 python svg matplotlib eps
我正在尝试使用matplotlib绘制3D热图以及我的模拟结果.我已经阅读了这个主题并尝试使用imshow.不幸的是,当我以SVG或EPS格式保存图形时,它会将热像转换为图片(这对于期刊来说是不可接受的).所以,我也试过了hexbin - 但是图像太奇怪了.我不确定它会被期刊接受.我们还有其他东西,或者我必须用矩形填充热垫?
例如,如果运行此代码:
import numpy as np
import numpy.random
import matplotlib.pyplot as plt
# Generate some test data
x = np.random.randn(8873)
y = np.random.randn(8873)
heatmap, xedges, yedges = np.histogram2d(x, y, bins=50)
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
print extent
print heatmap
plt.clf()
surf = plt.imshow(heatmap, extent=extent)
plt.colorbar(surf, shrink=0.75, aspect=5)
plt.show()
Run Code Online (Sandbox Code Playgroud)
并保存SVG文件,它将包含PNG图像:
<g clip-path="url(#p6def4f5150)">
<image height="347" width="315" x="115.127800906" xlink:href="data:image/png;base64,
Run Code Online (Sandbox Code Playgroud)
我在OpenSUSE和Ubuntu OS下使用matplotlib,版本1.1.1.
Joe*_*ton 10
如果您想要矢量输出,请使用pcolormesh
您正在使用的位置imshow
.
但是,在使用时pcolor
或者pcolormesh
无法插值图像时.另一方面,如果你想要矢量输出,你可能不想要插值.
这基本上是imshow
和pcolor
/ 之间差异的原因pcolormesh
.imshow
产生一个光栅,而pcolormesh
与pcolor
产生矩形块.
您还需要稍微改变传递图像范围的方式.以你的为例:
import numpy as np
import numpy.random
import matplotlib.pyplot as plt
# Generate some test data
x = np.random.randn(8873)
y = np.random.randn(8873)
heatmap, xedges, yedges = np.histogram2d(x, y, bins=50)
surf = plt.pcolormesh(xedges, yedges, heatmap)
plt.axis('image')
plt.colorbar(surf, shrink=0.75, aspect=5)
plt.show()
Run Code Online (Sandbox Code Playgroud)
当您保存为svg时,输出将是矢量补丁.例如
...
<g id="QuadMesh_1">
<defs>
<path d="
M75.9063 -43.2
L82.9705 -43.2
L82.9705 -50.112
L75.9063 -50.112
L75.9063 -43.2" id="C0_0_9d1ab33858"/>
<path d="
M82.9705 -43.2
L90.0348 -43.2
L90.0348 -50.112
L82.9705 -50.112
L82.9705 -43.2" id="C0_1_d828245e6a"/>
...
Run Code Online (Sandbox Code Playgroud)