Python numpy:根据坐标创建二维数组值,并使用pcolormesh,heatplolt绘制

时间:2016-12-06 15:25:07

标签: python arrays numpy matplotlib

我有Latitude(Lat)和Lonitude的数组,它们都是形状为5的一维数组。 然后我有另一个值为C的数组,这也是一个1D数组,形状为5.我想在最后用pcolormesh绘制孔的东西,所以有一种热图图!

以下是相应的代码:

self.showWindow(self)

然后我收到以下错误

#include "date.h"
#include <iostream>

int
main()
{
    using namespace date;
    for (sys_days start = mar/sun[1]/2016; start <= sys_days{mar/last/2018};
                                           start += weeks{1})
        std::cout << start << '\n';
}

2016-03-06
2016-03-13
2016-03-20
...
2018-03-18
2018-03-25

所以想给每个X-Y对一个C值,所以有5个XY对和5个C值。理论上应该没问题,但我真的找不到解决方案!

3 个答案:

答案 0 :(得分:0)

pcolormesh用于绘制网格。网格是值的网格(对于latlonC的所有三个),pcolormesh将绘制连接网格中相邻值的线和四边形。

你没有网格(2d),你最多只能使用折线(1d)。对于独特的热图,这并没有足够的信息。

答案 1 :(得分:0)

您有两个问题,一个是逻辑问题,另一个问题是pcolormesh

首先,CLat包含5个值,但Lon包含6个值。这意味着你没有5个XY值和5个C值,所以这是你应该解决的问题。

但如果正确扩展坐标,可以创建一个带有几个不同坐标的pcolormesh:

import numpy as np
import matplotlib.pyplot as plt

plt.figure()

# Data
Lat = np.array([-65.62282562, -65.62266541, -65.62241364, -65.62398529, -65.62410736])
Lon = np.array([145.28251648, 145.38883972, 145.49528503, 121.4509201, 121.55738068])
C = np.array([0., 0.5, 2, 3, 0])

# Plot
plt.pcolormesh(np.expand_dims(Lat, 0), np.expand_dims(Lon, 1), C*np.eye(5))

expand_dims会使尺寸正确地相互广播,而np.eye会确保正确的值具有您在C中指定的值,所有其他坐标将为零

但输出可能看起来不太好,因为这是一个非常稀疏的坐标系。

pcolormesh之外还有其他替代方案,尤其是加权直方图可能会引起兴趣或轮廓:

Lat = np.random.normal(-65, 2, 50000)
Lon = np.random.normal(130, 5, 50000)
C = np.random.randint(0, 10, 50000)

plt.figure()
plt.hexbin(Lat, Lon, C=C, cmap=plt.cm.hot)

enter image description here

答案 2 :(得分:0)

Pcolormesh旨在与2D变量一起使用。如果对具有大量数据的变量使用np.eye(如实际情况),则可能会遇到内存问题。 可以通过以下方式使用散射来获得像pcolormesh这样的结果,其中1D数组具有与两个数组相同的形状,并且其值存在于两个数组的每对值中。

var usedCarPurchaseInqPromise = D_buyerProcess.buyerProcessApis.processUsedCarPurchaseInquiries(boxObj, leadData);
usedCarPurchaseInqPromise.always(function () {
    if (isFromCaptcha == "1")
        isFromCaptcha = "0";
    if (isGSDClick == "1")
        isGSDClick = "0";
    hideBuyerForm(boxObj);
    $('#newLoading').hide();
    boxObj.find('#pg-process_img,#pg-loadingImg').hide();
    boxObj.find("#loadDetails").hide();
}).fail(function () {
    D_buyerProcess.sellerDetails.processLeadFailureResponse(boxObj, jqXHR);
});
var hitRecoApi = $.ajax({
    type: 'GET',
    url: stockRecommendationsUrl_g,
    headers: { "sourceid": "1" },
    dataType: 'json'
});

$.when(usedCarPurchaseInqPromise, hitRecoApi).done(function (response, jsonData) {
    Common.utils.lockPopup();
    if (D_buyerProcess.utils.isNumberChanged(buyersMobile)) {//if user has changed number as compared to previously stored number in cookie, remove the finance offer of previous number
        if (typeof (customerFinanceUI) !== 'undefined' && typeof (customerFinance) !== 'undefined') {
            customerFinanceUI.hideFinanceOffer();
            customerFinance.removeFinanceOffer(); // removes finance cookie and storage
        }
    }
}