1

我的问题的要点:

我有我正在plot_surface使用 python 的数据。我应该如何改变我的价值观,xticks也许yticks还有他们的频率?

我的问题的详细信息

我有这样的数据。我不得不将我的数据文件上传到保管箱,因为它太大而无法在此处复制,而且我不确定“最小示例”是否能做到公正。

我在一个文件夹中有几个这样的数据文件(真的想几十个),我在该文件夹上运行一个 python 脚本来加载每个这样的数据文件并创建一个曲面图。我的 python 代码如下所示:

蟒蛇代码

import os
import glob
import sys
import subprocess
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

from numpy import *
from numpy.random import rand
from pylab import pcolor, show, colorbar, xticks, yticks
from pylab import *

for fname in glob.glob('*profile*.dat'):
    with open(fname) as f:
        data = np.loadtxt(fname)
        z = np.array(data)

    x,y = np.meshgrid(range(data.shape[0]), range(data.shape[1]))

    fig = plt.figure()

    ax = fig.gca(projection='3d')
    ax.plot_surface(x, y, z, rstride=5, cstride=5,cmap="binary",linewidth=0.1)
    ax.set_zlim3d(0.0,4.0)

    ax.set_xlabel('X',fontsize=16,fontweight="bold")
    ax.set_ylabel('Y',fontsize=16,fontweight="bold")
    ax.set_zlabel('h(X,T)',fontsize=16,fontweight="bold")
    savefig('/home/uid/Desktop/'+fname.replace(".dat","")+'.eps',figsize=(5,5),dpi=600)
    savefig('/home/uid/Desktop/'+fname.replace(".dat","")+'.pdf',figsize=(5,5),dpi=600)

print "Profile plots have been saved!"
"EOF"

情节如下所示:

我的代码生成的曲面图

观察/我想要完成的事情:

我需要做的是将 xticks 和 yticks 更改为其他数字。图中显示的实际上是使用的“网格点”。我的 X 和 Y 长度实际上是“50 个单位”,每个方向使用大约 265 个网格点。

如何更改 xticks 和 yticks 以在 x 和 y 轴上显示“0 ... 50”?

如果这个问题看起来很幼稚,我深表歉意,但我一直在寻找解决问题的方法,但只提出了最少的答案。1 2 .

4

1 回答 1

1

假设每个数据维度(即data.shape = (266, 266))中的 266 个点代表0...50,那么您可以简单地缩放meshgrid()输出:

x,y = np.meshgrid(range(data.shape[0]), range(data.shape[1]))
x *= 50./data.shape[0]
y *= 50./data.shape[1]

如果您还需要修改它们的频率,则只需按照您找到的第二个答案的建议直接手动或以编程xticks()方式进行修改:yticks()

ax.set_xticks([0., 15., 30., 45.])
num_ticks = 5.
ax.set_yticks(arange(num_ticks)/(num_ticks-1) * 50)
于 2013-04-30T03:24:19.753 回答