我有一些z = f(x,y)数据,我想在热图中显示。所以我使用public class Downloader extends AsyncTask<Combine,String,Combine> {
Responcer1 responder;
HttpURLConnection connection;
int id;
int position;
public Downloader(int position){
this.position=position;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
responder=new SavedLinks();
responder.start(position);
}
@Override
protected Combine doInBackground(Combine... param) {
try {
int position=param[0].position;
Log.i("downloader",param[0].caption+param[0].link+param[0].url+param[0].user);
id=param[0].id;
connection = null;
URL url;
url = new URL(param[0].link);
connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(45000);
connection.setReadTimeout(5000);
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");}
in.close();
connection.disconnect();
return saperate(sb.toString(),param[0]);
} catch (Exception e) {
e.printStackTrace();
return null;
}}
创建(x,y)-grid,然后调用np.meshgrid
。然而,对于与数据点对应的每个“图块”,刻度不是居中的 - 在文档中,我没有找到关于如何使每个图块的刻度居中的任何指令,以便我可以立即读取相应的值。有什么想法吗?
例如,在附加的图像中,不清楚刻度对应于哪个x值。
答案 0 :(得分:4)
在pcolormesh中,网格由边缘值定义。在以下示例中,左下角的值6是每个维度中0到1之间的值。我认为这对每个人都是完全可以理解的。
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
x = np.arange(5)
y = np.arange(3)
X,Y = np.meshgrid(x,y)
Z = np.random.randint(1,9, size=(2,4))
plt.pcolormesh(X,Y,Z)
plt.show()
现在,如果你想(仅)在单元格的中间有一个刻度,你可以按如下方式设置它们
plt.xticks(x[:-1]+0.5)
plt.yticks(y[:-1]+0.5)
如果左下角像素实际上与0和1之间的数据不对应,但对于数据 0,则网格&#39;错误&#39; ;一个解决方案是通过将其平移一半的像素宽度来修复它。
plt.pcolormesh(X-0.5,Y-0.5,Z)
如上所述,可以使用plt.xticks
来调整刻度线以仅显示某些数字。