pcolormesh为每个数据点/区块打勾

时间:2017-03-30 20:53:22

标签: python numpy matplotlib plot heatmap

我有一些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值。

Ticks

1 个答案:

答案 0 :(得分:4)

在pcolormesh中,网格由边缘值定义。在以下示例中,左下角的值6是每个维度中0到1之间的值。我认为这对每个人都是完全可以理解的。

enter image description here

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)

enter image description here

如果左下角像素实际上与0和1之间的数据不对应,但对于数据 0,则网格&#39;错误&#39; ;一个解决方案是通过将其平移一半的像素宽度来修复它。

plt.pcolormesh(X-0.5,Y-0.5,Z)

enter image description here

如上所述,可以使用plt.xticks来调整刻度线以仅显示某些数字。