matplotlib曲面线宽错误

时间:2014-04-28 17:41:30

标签: matplotlib plot

我正在尝试使用matplotlib绘制曲面。 有一个问题是,即使我在代码中将线宽指定为零,show()也会显示没有线条的正确图。但是生成的pdf仍然有行。

有谁能说出如何解决这个问题?

以下是我用来绘制

的代码
#!/usr/bin/env python


import numpy as np
from matplotlib import cm
import matplotlib.pyplot as plt
import scipy.ndimage as ndimage


vmaxValue=400
#plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

fileName="test"
csvFile=fileName+".csv"
outputFile=fileName+".pdf"
pgfFile=fileName+".pgf"
data = np.genfromtxt(csvFile)

# Delete the first row and first column.
Z = np.delete(data, (0), axis=0)
Z = np.delete(Z, (0), axis=1)

Z2 = ndimage.gaussian_filter(Z, sigma=0.85, order=0)

X, Y = np.meshgrid(np.arange(1,len(Z[0])+1,1), np.arange(1,len(Z)+1,1))

surf = ax.plot_surface(X, Y, Z2, linewidth=0, cstride=1, rstride=1,  cmap=cm.coolwarm, antialiased=False, vmin=0, vmax=vmaxValue)

#plt.colorbar()
fig.colorbar(surf, ax=ax, shrink=0.75,pad=-0.05, aspect=15)

ax.set_zlim(0,vmaxValue)
ax.set_xlabel(r'$\alpha$')
ax.set_ylabel('processors')
ax.set_zlabel('Exploration Time(seconds)')
ax.view_init(20, -160)

fig.savefig(outputFile,format="pdf", bbox_inches='tight')

这是csv文件test.csv

Processors  graph1  graph2  graph3  graph4  graph5  graph6  graph7  graph8  graph9  graph10 graph11 graph12 graph13 graph14 graph15 graph16 graph17 graph18 graph19 graph20 graph21 graph22 graph23
1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
2   0   0   0   0   0   0   0   0   10  7   190 180 360 180 360 180 360 180 360 180 360 180 360
3   0   0   0   0   0   0   0   0   0   64  52  85  247 274 180 360 360 360 360 360 360 360 360
4   0   0   0   0   0   0   0   0   6   1   1   2   180 180 187 187 180 180 360 360 180 180 360
5   0   0   0   0   0   0   0   0   0   0   180 177 175 180 180 360 360 360 360 360 540 540 360
6   0   0   0   0   0   0   0   1   1   1   1   1   181 181 180 180 180 180 360 360 360 360 180
7   0   0   0   0   0   0   0   8   12  6   6   7   8   8   180 180 180 180 180 180 180 360 180
8   0   0   0   0   0   0   0   0   180 133 175 166 148 180 180 180 180 180 180 180 180 180 360
9   0   0   0   0   0   0   0   0   0   180 180 180 180 180 180 180 180 180 180 180 180 180 360
10  0   0   0   0   0   0   0   0   0   0   180 180 180 180 180 180 180 180 180 180 180 180 360
11  0   0   0   0   0   0   0   0   0   0   0   180 180 180 180 180 180 180 180 180 180 180 360
12  0   0   0   0   0   0   0   0   0   0   0   0   180 180 180 180 180 180 180 180 180 180 180
13  0   0   0   0   0   0   0   0   0   0   0   0   0   180 180 180 180 180 180 180 180 180 180
14  0   0   0   0   0   0   0   0   0   0   0   0   0   0   180 180 180 180 180 180 180 180 180
15  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   180 180 180 180 180 180 180 180
16  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   180 180 180 180 180 180 180
17  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   180 180 180 180 180 180
18  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   180 180 180 180 180
19  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   180 180 180 180
20  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   180 184 180
21  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   180 180
22  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   180
23  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
24  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
25  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

由于

1 个答案:

答案 0 :(得分:1)

显然它与你的pdf抗锯齿有关。

如果你不介意一些额外的计算时间,this answer建议你可以通过多次绘制相同的数字来摆脱它,

for i in range(k):
   ax.plot_surface(X, Y, Z2, linewidth=0, cstride=1, rstride=1,  cmap=cm.coolwarm, antialiased=False, vmin=0, vmax=vmaxValue)

注意k=2对我来说效果很好。我不会说每次你的文件大小加倍,但是大小会增加一个显着的数量

如果您感觉更有冒险精神,可以contourf查看this answerfor c in cnt.collections: c.set_edgecolor("face") 相同的问题。总结:

matplotlib

不幸的是collections 3D对象没有属性{{1}}所以它不会马上工作,但希望这会给你一个灵感